【问题标题】:Cherry-pick merge commit failing with empty commitCherry-pick 合并提交因空提交而失败
【发布时间】:2018-12-08 07:40:44
【问题描述】:

我有几个分支,我希望第二个分支的更改出现在第一个分支中。

最好用图表来描述:

          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 范围吗?还是有更好的方法?

【问题讨论】:

  • 是的,我认为你是对的。您可以按正确的顺序挑选三个XYZ 提交,然后您可以选择使用git rebase -i <sha1-of-I>~1 命令将这三个提交减少为一个。
  • 我会一一挑选。还请查看此SO answers 以了解您的错误消息。
  • 图表不显示哪个父级是哪个,但您可能需要-m 2,而不是更典型的-m 1。不过,您提出的解决方案(选择X^..Z)可能是最好的方法。请注意,您可以随时使用-n 将它们组合到索引中,并在最后进行一次提交,尽管我可能也会进行交互式变基壁球,因为这意味着我可以随时解决任何冲突,并确保我在压扁之前没有破坏任何东西。

标签: git merge git-merge cherry-pick git-cherry-pick


【解决方案1】:

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

根据 cmets 中 @quetzalcoatl 的建议,您可以将 -i 开关与 rebase 一起使用,以便在实际操作之前检查是否复制了正确的提交。

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

【讨论】:

  • 只有一个注释 - 对于所有“对 rebase 感到不安全”的人,请将 -i 添加到 rebase。这将向您显示将要进行的提交列表,您可以事先编辑(即删除、重新排序等)计划。这超级好用。我实际上很少使用没有 -i 的 rebase,因为我倾向于将分支的顺序误认为是 --onto/etc 参数,最好先检查计划。
猜你喜欢
  • 2020-03-12
  • 2012-05-21
  • 1970-01-01
  • 2016-04-11
  • 2016-01-08
  • 2012-03-11
  • 1970-01-01
  • 2012-11-05
  • 2021-01-18
相关资源
最近更新 更多