Git rebase分支与合并的孩子

时间:2012-04-04 17:59:54

标签: git merge branch rebase

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

     C--D    E--F             | subfeatures
    /    \  /    \
   B------M1------M2--G--H    | feature
  /
 A-------------------K        | master

通常我们在非快进之前将功能分支重新绑定到主服务器。但当然这个rebase失败了。重新启用的功能分支看起来像:

     B'--C'--D'--E'--F'--G'--H'
    /
A--K

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

2 个答案:

答案 0 :(得分:12)

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

  

长话短说:你刚刚完成了一次合并,有人推动了你的提交,然后才推出你的。解决方案是让git意识到你所做的合并。

git rebase --preserve-merges <upstream>

git rebase -p <upstream>
  

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

(这会要求git rerere

答案 1 :(得分:2)

你是一个一个一个地手工挑选每一个提交的吗?

只需运行git rebase -i master feature并根据需要重写历史记录。