樱桃拣选合并提交失败且有空提交。

3
我有几个分支,我想让第二个分支的更改出现在第一个分支中。
这可能最好用图表来描述:
          X - Y - Z    (branch-2)
         /         \
A - B - C - D - E - F  (master)
 \     
  G - H - I            (branch-1)

我想将 XYZ 合并到 branch-1 中,同时不包含 BC
我尝试了挑选合并提交 F,虽然我指定了正确的父提交(我认为是正确的),但是挑选失败了,错误信息为:“The previous cherry-pick is now empty, possibly due to conflict resolution.”。
我应该挑选 X^..Z 范围吗?还是有更好的方法?

1
是的,我认为你是正确的。您可以按正确顺序挑选三个 XYZ 提交,然后可以选择使用 git rebase -i <sha1-of-I>~1 命令将这3个提交合并为一个提交。 - jbaptperez
1
我会逐个挑选。此外,查看一下这个SO回答,了解你的错误信息。 - YesThatIsMyName
1
图形绘制没有显示哪个是父级,但可能需要使用-m 2而不是更典型的-m 1。您提出的解决方案(选择X^..Z)可能是最好的方式。请注意,您可以使用-n在索引中组合它们,并在最后进行一次提交,尽管我可能会做交互式变基压缩,因为这意味着我可以在处理冲突之前解决任何冲突,并确保我没有在压缩之前破坏任何东西。 - torek
1个回答

4

如果branch-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

如评论中的@quetzalcoatl所建议,您可以在使用rebase时使用-i开关,以便在实际操作之前检查正确的提交是否被复制。

另一方面,如果出现问题,您可以简单地将moving/branch-2还原为branch-2,然后重新开始。


3
只有一个提示-对于所有“不感到安全的人”,在 rebase 命令后添加 -i 标志。这将展示一个将被提交的提交清单,您可以在开始之前编辑(例如删除、重新排序等)。这非常方便。实际上,我很少使用没有 -i 的 rebase,因为我经常会混淆分支顺序和 --onto / etc 参数,最好先检查计划。 - quetzalcoatl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接