2012-04-04 112 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並根據需要重寫歷史記錄。