2015-07-14 10 views
2

Я читал немного о --squash ing коммиты, но все они, похоже, идут рука об руку с --rebase.Сквош фиксируется непосредственно на функции без переустановки или слияния

У меня есть ветвь функции с набором фиксаций, как это:

(Feature)   A --> B --> C --> D --> E --> F --> G 
       /
(Master) M1 --> M2 --> M3 

Предположим, я хочу, чтобы объединить обратно в Master ветви, но я хочу, чтобы очистить коммиты на моей функции первого.

Можно ли:

  • Pick фиксации B, E и F и раздавит их вместе, как один совершить?

ИЛИ

  • Могу ли я только сквош коммиты, которые приходят в порядок, так что сквош: (A, B и C), или сквош (D, E и F) и т.д.?

В любом случае, я могу сделать сквош прямо на моей функции, БЕЗ immidiately инициализации Merge или Rebase с ним?

Если да, то как я могу это сделать с Git?

ответ

0

Да и нет.

Да, вы можете избежать изменения родителя фиксации «А», но я считаю, что вы не можете избежать git rebase. Вы можете сделать интерактивную перебазироваться на тот же корень:

git rebase -i M2 Feature 

После этого вы можете делать все, что вы хотите, и в конце ветви Feature будет по-прежнему начинается с фиксации M2.

0

В рабочем процессе моей команды мы часто сливаемся с восходящим потоком в середине кучки коммитов, а перезарядка может стать уродливой. Я нашел это полезным для сквоша всех коммитов, которые находятся впереди мастера, в один:

# Commit any working changes on branch "mybranchname", then... 
git checkout master 
git checkout -b mybranchname_temp 
git merge --squash mybranchname 
git commit -am "Message describing all squashed commits" 
git branch -m mybranchname mybranchname_unsquashed 
git branch -m mybranchname 

# Optional cleanup: 
git branch -D mybranchname_unsquashed 

# If squashing already-pushed commits... 
git push -f 
Смежные вопросы