是否有可能从这里开始:
a--b--c--f
\
d--e
到此?
a--b--c--d--e--f
我在这一点上有点失落。欢迎任何帮助。
答案 0 :(得分:1)
不完全是。 Git无法移动提交,它只能复制和创建新的,不同的提交。实现想要你想做的事
git checkout e
git cherry-pick f
你将
a--b--c--d--e--f`
其中f`是f。
的副本答案 1 :(得分:0)
图表中缺少的部分是指向提交f
和e
的分支名称:
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
。)