我想将提交从一个分支向一个旧分支提交。我该怎么做?我知道我可以一个接一个地挑选每个提交,但是最简单的方法是什么呢?
来自:
___(a)__(b)__(c)__(d)__(e)__(f)__(g) <- master
\ \ /
\ (1)__(2)__(3) <- feature
\
(x)__(y)__(z) <- old release
对此:
___(a)__(b)__(c)__(d)__(e)__(f)__(g) <- master
\ \ /
\ (1)__(2)__(3) <- feature
\
(x)__(y)__(z)__(1)__(2)__(3) <- old release with feature
答案 0 :(得分:2)
首先,让我们考虑一下发布分支上的正常“rebase”在这里会做什么:
master
,因此只看到两个分支:提交a-b-1-2-3
的功能和提交a-x-y-z
的发布a
,因此要重新设定的提交将为b-1-2-3
a-x-y-z-b-1-2-3
结尾,插入提交(b)
,实际上可能是master
的大部分幸运的是,git rebase
命令有一个带有三个参数的表单,the manual page总结为:
git rebase --onto <newbase> <upstream> <branch>
但也许最好解释为:
git rebase --onto <new-parent> <old-parent> <branch>
在你的例子中:
<newbase>
/ <new-parent>
将提交(z)
:您希望将提交内容提交到<upstream>
/ <old-parent>
将提交(b)
:您感兴趣的提交当前分支的位置(您感兴趣的第一个提交的当前父级) <branch>
将是当前指向(3)
的功能分支的名称,而最终将指向新的重新定位的历史记录你可以不用最后一个参数,它只会使用当前检出的任何分支;如果指定,它应该是分支名称。另外两个参数可以是标识提交的任何内容 - 分支名称,标记名称或提交哈希。
答案 1 :(得分:1)
您可以使用范围cherry-pick
运行git cherry-pick b..3
命令。如果您不想更改分支指针,我会建议这样做。
https://git-scm.com/docs/git-cherry-pick#git-cherry-pick-ltcommitgt82308203