2011-03-23 27 views
3

比方說,我有一個Git倉庫,看起來像這樣:如何根據每次提交的日期將兩個分支合併爲一個分支?

merge-base---A1--A2------A3------A4 (branchA) 
      \ 
      ----------B1------B2 (branchB) 

爲了讓事情變得更簡單,讓我們說上branchA的提交嚴格修改的fileA,並branchB的提交嚴格的修改FILEB。

我想這些分支合併到第三分支,branchAB,其中提交將按日期排序:

merge-base---A1--A2------A3------A4 (branchA) 
      \ 
      ----------B1------B2 (branchB) 
      \ 
      A1--A2--B1--A3--B2--A4 (branchAB) 

有沒有辦法用一個單一的git命令自動做到這一點,還是我堅持手動方法(如櫻桃採摘或rebase -i)?

順便說一句,merge-base是一個標籤。

回答

4

這裏有一個解決方案,我想要做什麼,基於adymitruk's original answer

git checkout -b branchAB merge-base 
git merge branchA 
git merge branchB 
git rebase --onto merge-base merge-base branchAB 
+0

我知道第一次合併只是一個快進。那麼爲什麼不在其他分支之一上創建ab分支作爲起點呢? – 2011-03-23 23:03:19

+0

@adymitruk:是不是會重新排序提交,以便獲得一個分支的所有提交以及所有其他分支的提交?保持訂單(基於日期)非常重要。 – splicer 2011-03-24 00:29:41

+0

@adymitruk:再想一想,是的,應該可以在branchA的頂端開始branchAB,然後合併到branchB。重要的是做一個'rebase - 去'去除branchAB上的合併歷史記錄,按日期重新排序提交。 – splicer 2011-03-24 15:27:01

1

這應做到:

git branch branchAB branchA 
git checkout branchB 
git merge branchA 
git rebase --onto A1^ B1^ branchAB 

衍合的「吃」這次合併提交的未指定--preserve-合併。

希望這有助於

+0

關閉,但有兩個問題,您的解決方案。首先,不是創建第三個分支branchAB,而是修改branchB。其次,最後一個命令從組合分支(分支B)中刪除A4。除了這兩件事之外,它確實是我想要的。謝謝!如果您可以解決我提到的兩個問題,我會將您的答案標記爲已接受;) – splicer 2011-03-23 21:29:16

+0

完成。不需要進行快速合併,只需在其他人之一上創建AB分支。 – 2011-03-23 22:59:14

+0

我剛剛嘗試過編輯後的解決方案(用'merge-base'代替'A1 ^'和'B1 ^')。不幸的是,它甚至沒有接近工作。 'branchAB'最終與'branchA'相同,'branchB'被更改爲指向*合併分支'branchA'到分支B *。 – splicer 2011-03-24 01:38:13

相關問題