2012-04-04 118 views
8

今天我遇到了一个问题。我的队友从主人创建分支。他在这个分支中开发了一个特征,然后在子特征分支中开发了两个子特征。最后他对整个事情做了两次重构。所以...合并孩子的Git 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 

Ç&当然指针d成了错了,所以我也得到两个子功能分支“从空中不断增长。我明白如何修复它,如果子功能分支没有合并到功能,但在这个时候我感到困惑。我挑选了所有重建的恢复分支,并再次合并。这里是一个更简单的方法来做到这一点?

回答

11

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

长话短说:您刚刚完成合并,并且有人在推送您之前已经推送了一个提交。解决办法是让git意识到你所做的合并。

git rebase --preserve-merges <upstream> 

git rebase -p <upstream> 

但是有一个问题,如果您的合并了,你解决了,他们不会被重订机械拾起冲突。
你最终会再次解决冲突......至少这是Git版本的情况下1.7.5.4

(这将要求git rerere

2

您是否亲手挑选每一个承诺?

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