今天我遇到了一个问题。我的队友从大师那里创建了分支。他在这个分支中开发了一个特征,然后在子特征的分支中开发了两个子特征。最后他对整个事情做了两次重构。所以......
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出错了,所以我还得到了两个从空中成长的子分支。如果子特征分支没有合并到特征中,我理解如何修复它,但此时我很困惑。我在精心挑选的恢复分支中挑选了所有内容并再次合并。这是一种更简单的方法吗?
答案 0 :(得分:12)
请注意,git rebase --preserve-merges
需要git1.7.6 +才能正常工作。
rebase --preserve-merges --onto
之前无效(“git rebase --preserve-merges --onto
doesn't preserve merges”)rebase --preserve-merges
在某些情况下有问题:
长话短说:你刚刚完成了一次合并,有人推动了你的提交,然后才推出你的。解决方案是让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
并根据需要重写历史记录。