2015-01-09 4 views
2

Итак, у меня есть ситуация с мастером и веткой bugfix, которая продолжает его. Я попытался вырвать некоторые коммиты на master, а затем перезагрузить исправление, но у меня возникли конфликты слияния. Каков правильный способ сделать это? Я работаю локально, и нет удаленного.Как выполнить сквош на ветке с дочерними элементами

Это выглядит следующим образом:

A - B - C - D - E - F [master] 
        \     
         G - H - I - J - K [bugfix] 

Я хочу, чтобы раздавить A - B - C - D - E - F и до сих пор продолжает BUGFIX сжатую мастер филиала.

+2

Чтобы получить полезный ответ, вы должны сообщить нам больше. Сообщите нам, какая часть (если есть) истории вашего репо была перенесена на общий удаленный доступ и, возможно, добавила граф фиксации ASCII (см. [This] (http://stackoverflow.com/questions/25488138/move-initial-commits -off-master-to-another-branch-in-git/25490288 # 25490288), который описывает вашу недавнюю историю. – Jubobs

ответ

4

Точка Jubob об общей истории очень важна, так как перезагрузка или раздача общих коммитов сильно обескуражена.

Предполагаю, что вы работаете с местными коммитами.

Предположим, что вы начали с этим:

[master] A---B---C---D 
         \ 
[bugfix]    1---2---3 

и вы решили сквош B, C и D в новое обязательство D'

[master] A---D' 
      \ 
[bugfix] B---C---D---1---2---3 

Обратите внимание, что совершает B, C и D остаются в bugfix филиал. Если вы просто перебазировать bugfix на master, Git будет пытаться это сделать:

[master] A---D' 
       \ 
[bugfix]  B---C---D---1---2---3 

Но изменения, внесенные B, C и D уже содержатся в D'. То, что вы действительно хотите, чтобы в конечном итоге это:

[master] A---D' 
       \ 
[bugfix]  1---2---3 

Вы можете сделать это с --onto опцией rebase:

git rebase --onto master D bugfix 

D должна быть последней фиксации в bugfix, которые должны не быть включено если rebasing.

Смежные вопросы