2015-11-04 97 views
0

有時我會在多個部分處理一個功能,因爲它是一個很大的功能,但每個部分都依賴於它之前的部分。讓第二層分支與第一層保持同步

,而第1部分仍在審覈/測試/等我分支的第二部分從第1部分..我結束了類似 - 直到我

  ---F2-> (Feature branch part 2) 
     /
    ---F1------> (Feature branch part 1) 
/
--M0---M1---M2-> (master) 

一切的偉大工程中途功能部件2和實現我需要在功能部分的改變或正確的東西1.

所以我切換回第一個特性分支,並進行了更改(和壁球它,所以它仍然是1提交)

  ---F2-> (Feature branch part 2) 
     /
     ---F1 
    /
    /----F1' (Feature branch part 1) 
/
--M0---M1---M2-> (master) 

當我重新綁定特徵部分2分支以拉入F1'時,我解決了所有衝突,但仍然保留F1。所以我最終得到了F1F1'的「雙重承諾」。

有沒有什麼辦法可以基本上替換F1F1'當重新綁定?

更一般地說 - 如何使用像這樣涉及多層分支的功能的公認最佳實踐是什麼?我通常不會過去2,但如果有一個好的工作流程來管理它,我會用它。

回答

1

您可以通過B2的交互式轉化來完成此操作。

$ git checkout B2 
$ git rebase -i B1 

然後只需刪除F1的線,只保留了F1'行了,你得到了你想要的東西,切換提交對彼此:)

我用網絡連接的提交(S)和B分支。顯然,rebase是在它打開的編輯器中進行的每次提交,並且如果我們正在討論功能分支中的一個或多個提交,我不太清楚。

+0

非常好,謝謝! – user2490003

1

另一種選擇:

git checkout F2 
git rebase --onto F1 "$(git merge-base --fork-point F1)" 
+1

在rebase上還有'--fork-point'選項,'git rebase --fork-point F1 F2'應該這樣做。 – jthill

1

的Git使這很容易,只要告訴它你追蹤什麼。爲了製作你的圖表,例如這,

git checkout -tb F2   # F2 tracks current checkout (or you could say F1 explicitly) 
work work commit commit 
git checkout F1    # F1 needs work 
work some more 
git rebase     # F1 needs its own rebase 
git checkout F2    # back to F2 
yet more work 

它看起來很雜草,但這是一個非常普遍的序列。從這裏底墊命令

git rebase 

再次基於默認爲--fork-point,當你的時候你不在(一定)重訂到您的默認跟蹤分公司,全拼已經F2簽出,F2不跟蹤F1是git rebase --fork-point F1 F2

相關問題