昨天我在主分支中挑选了两个提交,其中一个引起了合并冲突,我解决了它们,提交并将它们推送到源头。今天,当我收到以下错误时,我正在尝试从服务器中提取:
$ 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>
$
关于我如何解决这个问题的任何想法?提前感谢!
下次尝试git cherry-pick --abort
,否则您所做的应该或多或少有效。
通过以下方式解决: rm .git/CHERRY_PICK_HEAD
我意识到这很危险,因为这不能保证 git 中的内部一致性,但到目前为止对我来说没有任何问题......
自从我上次从 2014 年开始回答以来,现在(2018 年(的正确命令是 git cherry-pick --quit
.
在 Git 2.19(2018 年第 3 季度(之前,"git cherry-pick --quit
"未能删除CHERRY_PICK_HEAD
,即使我们在它返回后不会进入樱桃挑选会话,这已得到纠正。
参见提交 3e7dd99 (2018 年 8 月 16 日(,作者:Nguyễn Thái Ngọc Duy ( pclouds
(。
(由Junio C Hamano -- gitster
-- 在提交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
测试中添加额外的检查来确认。
git cherry-pick --continue
不起作用,这意味着 git 太旧了:该选项是在提交 5a5d80f 中为 git 1.7.8(2011 年 12 月(引入
它的工作原理是从.git/sequencer/todo中删除第一条指令并执行其中列出的其余的樱桃选择,以及"
.git/sequencer/opts
"中列出的初始命令中的选项(想想"-s
"和"-X
"(。
这些天(2014年(,这将是您看到" You have not concluded your cherry-pick
"时使用的命令。
另一种选择:使用 Git 2.23(2019 年第 3 季度(,git cherry-pick --continue
实际上可以工作!
当重置或提交多步骤挑选或还原中的一个步骤时,命令行提示符脚本无法注意到当前状态,这已得到改进。
请参阅提交 e981bf7 (01 Jul 2019( by Phillip Wood ( phillipwood
(.
(由Junio C Hamano -- gitster
-- 在提交 8a4acc5 中合并,2019 年 7 月 19 日(
git-prompt
: 提高cherry-pick
/revert
检测如果用户在一系列挑剔或还原的过程中提交或重置冲突解决方案,则将删除
CHERRY_PICK_HEAD
/REVERT_HEAD
,因此在没有这些文件的情况下,我们需要检查.git/sequencer/todo
以查看是否有正在进行中挑选或还原。查看
cherry-pick
或revert
是否正在进行中,如果用户在一系列拾取或还原过程中与"git commit
"提交了冲突解决方案,则CHERRY_PICK_HEAD
/REVERT_HEAD
将不存在,因此我们必须读取todo
文件。