重新绑定/重复功能分支到较旧的版本

时间:2018-06-07 16:51:03

标签: git

我想将提交从一个分支向一个旧分支提交。我该怎么做?我知道我可以一个接一个地挑选每个提交,但是最简单的方法是什么呢?

来自:

___(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

2 个答案:

答案 0 :(得分:2)

首先,让我们考虑一下发布分支上的正常“rebase”在这里会做什么:

  • git不知道涉及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