原文地址:Git: How to copy a range of commits from one branch to another? 作者:tobi
有時候將一系列commit合並到另一個分支上是非常有用的。這篇文章介紹了如何使用git rebase來實現上邊提到的需求。下面2個例子說明了不同的使用場景,這應該有助於你理解這個命令的參數。
例子1:圖中的P,Q,R是feature分支中的commit id,這3個commit需要合並到master分支上,應該會追加到M上。
第一個命令git rebase --onto M O R復制P,Q,R到master分支上。在gitk上是看不到包含它們的可視化記錄。這是因為沒有任何分支指向這3次提交。通過第二個命令git rebase HEAD master更新master分支:將HEAD向后指向R(譯者注:這塊HEAD處於游離態)。

例子2:跟第一個例子類似。主要專注於一下兩點:1)你能選擇任何commit節點作為合並一系列commit的根(第一個例子是M),在這里我選擇節點L作為合並的根。2)跟例1一樣,在完成合並操作后,你可以創建一個分支,HEAD為你合並的一列分支的最后commit節點(圖中為R),從而可以讓這些合並的commits可見。

當你理解了這三個參數,你會發現這個命令在不同的場景下都是類似的。因此,記住以下:
git rebase --onto argument1 argument2 argument3
- argument1 對於合並操作的目標分支commit節點,它是argument2的前一次commit
- argument2 合並分支開始的前一次提交,argument2不會合並到argument1上去
- argument3 合並分支結束提交節點,
注:在數學上可以類似表示(argument2, argument3],前開后閉,本身不包括argument2
參考資料
