【译文】git 从一个分支复制一系列commit到另一个分支

原文地址: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

参考资料

posted @ 2020-12-16 23:57  韩帅  阅读(1492)  评论(0编辑  收藏  举报