【问题标题】:How to Conclude a Git Cherry-Pick?如何结束 Git Cherry-Pick?
【发布时间】:2012-09-06 00:55:43
【问题描述】:

昨天我在我的主分支中挑选了两个提交,其中一个导致了合并冲突,我解决了它们,提交并将它们推送到原点。今天,当我收到以下错误时,我试图从服务器中提取:

$ 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 版本? git cherry-pick --continue已于2011年8月引入(github.com/git/git/commit/…,git1.7.7+)
  • @VonC,您应该将此作为答案提交。现在是正确的。
  • @cjbarth 我已将其发布为下面的答案。
  • 我已经用西班牙语 here 提出了这个问题,之前没有读过这个问题。

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


【解决方案1】:

另一种选择:使用 Git 2.23(2019 年第三季度),git cherry-pick --continue 将真正起作用!

当多步cherry-pick或revert中的一个步骤被reset或commit时,命令行提示脚本未能注意到当前状态,已改进。

参见Phillip Wood (phillipwood)commit e981bf7(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”提交了冲突解决方案,那么CHERRY_PICK_HEAD/REVERT_HEAD 将不存在,所以我们必须读取todo 文件。

【讨论】:

    【解决方案2】:

    由于我的previous answer from 2014,现在(2018)正确的命令是git cherry-pick --quit
    在 Git 2.19(2018 年第三季度)之前,“git cherry-pick --quit”无法删除 CHERRY_PICK_HEAD,即使它返回后我们不会进入樱桃挑选会话,这已得到纠正。

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

    cherry-pick:修复 --quit 不删除 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 cli 仍然向我推荐。 git cherry-pick --quit 工作得很好。
    • @AmoghJahaagirdar 你用的是什么版本的 Git?
    • git version 2.21.0.windows.1
    • @AmoghJahagirdar 你能检查一下 Git For Windows 2.27 的问题是否仍然存在吗? (github.com/git-for-windows/git/releases)
    【解决方案3】:

    如果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”时,这将是使用的命令。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 为什么投反对票?它对我来说很好用,没有造成任何问题。
        • 当然,这对大多数人有效,但它是一些最坏做法的例子,对一些人来说可能是灾难性的。跨度>
        • 就我而言,我使用 SourceTree 并错误地挑选了樱桃。它没有提交任何东西,并且一个类与合并冲突。我丢弃了它。然后我想拉一些提交。拉动失败。我试过你的代码,但没有用。那是因为你得到了一些反对意见。
        猜你喜欢
        • 1970-01-01
        • 2013-11-18
        • 2012-06-24
        • 2011-10-27
        • 1970-01-01
        • 2018-04-17
        • 2018-07-29
        • 2016-02-11
        • 2018-07-27
        相关资源
        最近更新 更多