推送其他两个之间的提交

时间:2017-07-31 22:28:48

标签: git

是否有可能从这里开始:

a--b--c--f
       \
        d--e

到此?

a--b--c--d--e--f

我在这一点上有点失落。欢迎任何帮助。

2 个答案:

答案 0 :(得分:1)

不完全是。 Git无法移动提交,它只能复制和创建新的,不同的提交。实现想要你想做的事

git checkout e
git cherry-pick f

你将

a--b--c--d--e--f`

其中f`是f。

的副本

答案 1 :(得分:0)

图表中缺少的部分是指向提交fe的分支名称:

a--b--c--f   <-- branch_f
       \
        d--e   <-- branch_e

你不能逐字地移动提交f:一旦提交,提交是非常永久和不可更改的。但是,您可以复制提交f到一个与f非常相似的新提交,但在某些方面有所不同。

你想要的是一个类似于f的提交,除了它有e作为其父级,并且可能有不同的源基础(e的来源而不是c&#39; s。

樱桃采摘

要获得此类副本,可以使用git cherry-pick,它只是制作副本:

$ git checkout branch_e
$ git cherry-pick branch_f

,并提供:

a--b--c--f   <-- branch_f
       \
        d--e--f'  <-- branch_e (HEAD)

请注意,我们已将新提交f'(副本)添加到当前分支branch_e

衍合

我们可以使用git cherry-pick而不是git rebase。这将自动复制一些提交:

$ git checkout branch_f
$ git rebase branch_e

要复制的提交集是当前分支上的提交 - 这就是为什么我们必须首先检查branch_f 其他分支上的提交,这就是为什么我们告诉它branch_e

它复制到的地方是&#34;在另一个分支的尖端之后#34;。

完成复制后,git rebase&#34;剥离&#34;标签branch_f来自之前的位置,并将其移动到最后复制的提交之后:

a--b--c--f   [abandoned]
       \
        d--e   <-- branch_e
            \
             f'  <-- branch_f (HEAD)

请注意,这是与以前相同的一组提交:关键区别在于branch_e尚未移动(仍指向e)且branch_f 已移动(现在指向新副本f')。

(此外,此次当前分支为branch_f。)