Git rebase分支与合并的孩子

eve*_*1nd 12 git merge branch rebase

今天我遇到了一个问题.我的队友从大师那里创建了分支.他在这个分支中开发了一个特征,然后在子特征的分支中开发了两个子特征.最后他对整个事情做了两次重构.所以...

     C--D    E--F             | subfeatures
    /    \  /    \
   B------M1------M2--G--H    | feature
  /
 A-------------------K        | master
Run Code Online (Sandbox Code Playgroud)

通常我们在将no-fast-forward合并到master之前对功能分支进行rebase.但当然这个rebase失败了.重新定义的功能分支看起来像:

     B'--C'--D'--E'--F'--G'--H'
    /
A--K
Run Code Online (Sandbox Code Playgroud)

当然,C&D的指针也出错了,所以我还得到了两个从空中成长的子功能分支.如果子特征分支没有合并到特征中,我理解如何修复它,但此时我很困惑.我在精心挑选的恢复分支中挑选了所有内容并再次合并.这是一个更简单的方法吗?

Von*_*onC 14

请注意,您需要git1.7.6 + git rebase --preserve-merges才能正常工作.

长话短说:你刚刚完成了一次合并,有人在你能够推动你的推动之前推动了一次提交.解决方案是让git意识到你所做的合并.

git rebase --preserve-merges <upstream>
Run Code Online (Sandbox Code Playgroud)

要么

git rebase -p <upstream>
Run Code Online (Sandbox Code Playgroud)

但是有一个问题,如果你的合并有你解决的冲突,他们就不会被rebase机器拿走.
而且你最终会再次解决冲突......至少git版本为1.7.5.4就是这种情况

(那会要求git rerere)