原文地址: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
参考资料