Git Cherry pick合并提交失败,提交为空
我有几个分支,我希望第二个分支的更改显示在第一个分支中 最好用图表来描述:Git Cherry pick合并提交失败,提交为空,git,merge,git-merge,cherry-pick,git-cherry-pick,Git,Merge,Git Merge,Cherry Pick,Git Cherry Pick,我有几个分支,我希望第二个分支的更改显示在第一个分支中 最好用图表来描述: X - Y - Z (branch-2) / \ A - B - C - D - E - F (master) \ G - H - I (branch-1) 我想将X,Y,Z合并到分支-1,而不带B和C 我尝试了cherry pick merge commitF,尽管我指定了正确的父级(我想),但cherry pick失
X - Y - Z (branch-2)
/ \
A - B - C - D - E - F (master)
\
G - H - I (branch-1)
我想将X
,Y
,Z
合并到分支-1
,而不带B
和C
我尝试了cherry pick merge commitF
,尽管我指定了正确的父级(我想),但cherry pick失败了:上一个cherry pick现在为空,可能是由于冲突解决。
我应该选择
X^..Z
范围吗?或者有更好的方法吗?如果分支2较小,则逐个采摘樱桃可能是一个解决方案
对于要移动的较大分支,我会这样做:
git checkout branch-2
git branch moving/branch-2 # new branch to work with
git rebase --onto branch-1 [sha_of_c] moving/branch-2 # move commits of branch ontop of the other
git checkout branch-1
git reset --hard moving/branch-2 # set branch lable to new HEAD
git branch -d moving/branch-2 # clean up
正如注释中@quetzalcatl所建议的那样,您可以使用-i
开关和重基
,以便在实际执行之前检查是否复制了正确的提交
另一方面,如果出现问题,您可以简单地将移动/branch-2还原为
branch-2
,然后重新开始。是的,我认为您是对的。你可以按照正确的顺序选择三个提交,然后你可以选择使用git-rebase-i~1命令将这三个提交减少为一个提交。我会逐个选择。另外,请查看此图以了解错误消息。图形绘图没有显示哪个父级是哪个,但您可能需要-m2
,而不是更典型的-m1
。不过,您提出的解决方案(选择X^..Z
)可能是最好的方法。请注意,您可以使用-n
在运行时将它们合并到索引中,并在最后进行一次提交,尽管我可能也会进行交互式的重新基础挤压,因为这意味着我可以在运行时解决任何冲突,并确保在挤压之前没有破坏任何内容。只需一个注意事项-对于所有“使用重新基础感到不安全”的人,将-i
添加到rebase
。这将向您显示将要执行的提交列表,您可以在此之前编辑(即删除、重新排序等)计划。这非常方便。实际上,我很少在没有-I的情况下使用rebase,因为我倾向于将分支的顺序误认为--on/etc参数,最好先检查计划。