如何结束一个 Git 樱桃挑选?

昨天我挑选了两个提交进入我的主分支,其中一个引起了合并冲突,我解决了它们,提交并将它们推到源头。今天,我试图从服务器上拉出时,我得到以下错误:

$ git pull
fatal: You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).
Please, commit your changes before you can merge.
$

Git 状态显示:

$ git status
# On branch main
# Your branch is behind 'origin/main' by 2 commits, and can be fast-forwarded.
#
$

我试过以下方法,但没有效果:

$ git cherry-pick --continue
usage: git cherry-pick [options] <commit-ish>
$

有什么办法可以解决这个问题吗? 提前谢谢!

58222 次浏览

解决方案如下: rm .git/CHERRY_PICK_HEAD我意识到这是危险的,因为这不能保证 git 内部的一致性,但是到目前为止对我来说没有问题..。

下次尝试 git cherry-pick --abort,否则你所做的应该或多或少工作。

如果 git cherry-pick --continue不能工作,那就意味着 git 太老了: 这个选项是在 犯下5a5d80f中为 git 1.7.8(2011年12月)引入的

它通过从。使用“ .git/sequencer/opts”中列出的初始命令中的选项(想想“ -s”和“ -X”)执行其余的樱桃选择。

如今(2014年) ,这将是当你看到“ You have not concluded your cherry-pick”时使用的命令。

从我的 2014年的上一个答案开始,现在(2018年)正确的命令是 git cherry-pick --quit
在 Git 2.19之前(2018年第三季度) ,“ git cherry-pick --quit”未能删除 CHERRY_PICK_HEAD,尽管在它返回之后我们不会处于一个樱桃选择会话中,这个问题已经得到纠正。

第三季第九十九集(2018年8月16日) by 易懂的泰语(pclouds)
(由 朱尼奥 · C · 哈马诺 gitster于2018年8月20日在 第三十九季,第415c 集合并)

Fix ——退出不删除 CHERRY _ PICK _ HEAD

--quit应该是 --abort,但没有恢复 HEAD
CHERRY_PICK_HEAD留在后面可能会使其他命令错误地认为 cherry-pick仍在运行(例如,“ git commit --amend”将拒绝工作)。

对于 --abort,这个删除 CHERRY_PICK_HEAD的工作是在“ git reset”上,所以我们不需要做其他任何事情。但是让我们在 --abort测试中添加额外的检查来确认。

另一种选择: 使用 Git 2.23(2019年第三季度) ,git cherry-pick --continue实际上可以工作!

当多步选择或还原中的一个步骤被重置或提交时,命令行提示脚本未能注意到当前状态,这已得到改进。

提交 e981bf7(2019年7月1日) by 菲利普 · 伍德(phillipwood)
(由 朱尼奥 · C · 哈马诺 gitster于2019年7月19日在 提交8a4acc5合并)

改进 cherry-pick/revert检测

如果用户提交或重置了一个冲突解决方案,在一系列的樱桃选择或恢复,然后 CHERRY_PICK_HEAD/REVERT_HEAD将被删除,因此在没有这些文件,我们需要检查 .git/sequencer/todo,看看是否有一个樱桃选择或恢复进行中。

看看是否一个 cherry-pickrevert是在进行中,如果用户已经承诺与’git commit’冲突的解决方案在一系列的选择或恢复,那么 CHERRY_PICK_HEAD/REVERT_HEAD将不存在,所以我们必须读取 todo文件。