如何结束Git Cherry-Pick?

时间:2012-09-13 00:14:47

标签: git version-control cherry-pick git-cherry-pick

昨天我挑选了两个提交到我的主分支,其中一个引起了合并冲突,我解决了它们,承诺并将它们推向原点。今天,当我收到以下错误时,我正试图从服务器拉出来:

$ 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>
$

关于如何解决这个问题的任何想法?提前谢谢!

5 个答案:

答案 0 :(得分:97)

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

答案 1 :(得分:10)

解决了以下问题:rm .git/CHERRY_PICK_HEAD我意识到这很危险,因为这并不能保证git内部的一致性,但到目前为止我没有问题...

答案 2 :(得分:7)

如果git cherry-pick --continue不起作用,那就意味着git太旧了:在commit 5a5d80f

中为git 1.7.8(2011年12月)引入了该选项
  

它的工作原理是从.git / sequencer / todo中删除第一条指令并执行其中列出的其余樱桃选择,并从最初的选项(认为“-s”和“-X”) “.git/sequencer/opts”中列出的命令。

这些天(2014年),这将是您在看到“You have not concluded your cherry-pick”时使用的命令。

答案 3 :(得分:1)

自从我的previous answer from 2014起,如今(2018年)正确的命令是git cherry-pick --quit
在Git 2.19(2018年第三季度)之前,“ git cherry-pick --quit”未能删除CHERRY_PICK_HEAD,即使我们在返回后不再处于选择状态也是如此。

请参见commit 3e7dd99Nguyễn Thái Ngọc Duy (pclouds)(2018年8月16日)。
(由Junio C Hamano -- gitster --commit 39e415c中合并,2018年8月20日)

  

樱桃采摘:修复-退出,不删除CHERRY_PICK_HEAD

     

--quit应该是--abort,但不恢复HEAD
  将CHERRY_PICK_HEAD遗忘可能会使其他命令误以为cherry-pick仍在进行中(例如,“ git commit --amend”将拒绝工作)。 也要清洁

     

对于--abort,此删除CHERRY_PICK_HEAD的工作位于“ git reset”上,因此我们无需执行其他任何操作。但是让我们在--abort测试中添加额外的检查以确认。

答案 4 :(得分:0)

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

当重置或提交多步樱桃选择或还原中的一个步骤时,命令行提示符脚本无法注意到当前状态,此状态已得到改善。

请参见commit e981bf7Phillip Wood (phillipwood)(2019年7月1日)。
(由Junio C Hamano -- gitster --commit 8a4acc5中合并,2019年7月19日)

  

git-prompt:改进cherry-pick / revert的检测

     

如果用户在一系列重击或还原操作中间提交或重置冲突解决方案,则CHERRY_PICK_HEAD / REVERT_HEAD将被删除,因此在没有这些文件的情况下,我们需要检查 .git/sequencer/todo 以查看是否正在进行摘樱桃或还原。

     

查看cherry-pickrevert是否在进行中,如果用户在一系列选择或还原操作的中间提交了与“ git commit”的冲突解决方案,则{{ 1}} / CHERRY_PICK_HEAD将不存在,因此我们必须读取REVERT_HEAD文件。