Обычно я обращаюсь к этому с помощью rebase .Предполагая, что вы начинаете с чего-то вроде:
target_branch ...--A---B---C---D---E
\
feature_branch F---G
Тогда следующее:
git checkout feature_branch
git rebase target_branch
Результатом будет следующее:
target_branch ...--A---B---C---D---E
\
feature_branch F'--G'
Это имеет два полезныхсвойства для вас:
Ни один из коммитов на target_branch
не переписывается, поэтому они сохраняют своих первоначальных авторов;и
Перезапись сначала F
(становится F'
, с новым родителем E
вместо B
), а затем G
(становится G'
, сновый родитель F'
вместо F
) позволяет разрешать любые конфликты с C
, D
и E
поэтапно.
В результате получается парафиксирует на feature_branch
, что может быть легко применено обратно к target_branch
без конфликтов.
Обратите внимание , что, если вы уже нажали feature_branch
на пульт, переписывание истории означает, что вам придется принудительно push
(в идеале --force-with-lease
) эти новыесовершает.