【问题标题】:Cherry pick shows no -m option was given errorCherry pick 显示没有给出 -m 选项错误
【发布时间】:2016-08-26 20:05:36
【问题描述】:

我有两个分支 master 和 development

我需要从 master 分支的开发分支获取一些提交 id,所以我通过cherry-pick 来完成,但它显示了一些错误

$> git cherry-pick cf0d52b

error: Commit cf0d52b900f990300c3aa17936ddbae1476d461a is a merge but no -m option was given.
fatal: cherry-pick failed

我没有收到此错误,为什么会出现此错误以及如何解决此错误。

【问题讨论】:

标签: git cherry-pick


【解决方案1】:

尝试使用git log --no-merges 将用于仅显示没有“合并哈希”的提交。对于具有大量更改或合并的项目,这可能很有用

【讨论】:

    【解决方案2】:

    此选项指定父编号(从1开始)

    直到 Git 2.13(2017 年第二季度),这个数字可能是 0! (这是不正确的)

    参见Jeff King (peff)commit b16a991(2017 年 3 月 15 日)。
    (由 Junio C Hamano -- gitster -- 合并于 commit 9c96637,2017 年 3 月 17 日)

    cherry-pick:检测--mainline 的虚假参数

    cherry-pick 和 revert 命令使用OPT_INTEGER() 解析--mainline。股票解析器足够聪明,可以拒绝非数字的废话,但它不知道父计数从 1 开始。

    更糟糕的是,值“0”与未设置的情况无法区分,因此假设计数是基于 0 的用户会收到一条令人困惑的消息:

    $ git cherry-pick -m 0 $merge
      error: commit ... is a merge but no -m option was given.
    

    正确的诊断是“-m 0”不是指第一个父母(“-m 1”是)。

    【讨论】:

    • 是的,我正在使用git version 2.21.0-m 1 工作。
    【解决方案3】:

    您正在尝试 cherry-pick 合并。合并是从几个父级建立的。您必须为合并提供父 ID。

    您必须提供以下任何一项:

    -m parent-number / --mainline parent-number

    通常您不能选择合并,因为您不知道合并的哪一侧应该被视为主线。

    该选项指定主线的父级编号(从 1 开始),并允许cherry-pick 重播相对于指定父级的更改。


    如何找出提交的父母是什么?

    使用git show命令查看commit parents,然后你可以选择parent index或者SHA-1

    【讨论】:

    • 我还是不明白如何找到父母号码
    • 在上面的截图中有2个id,d684a65和d23e8e8,如何知道哪个是指我所在的分支?
    • 除了@RaphaelPinel 的回答之外,您还可以检查 git 日志并检查哪个分支包含您想要挑选的提交。该提交应该具有显示在“合并:”下的 ID 之一。通常,该命令将是:git cherry-pick -m 1 <SHA>
    • 除了@RaphaelPinel 和@MikaelHalen,git log --no-merges 将用于显示没有“合并哈希”的提交;对于具有大量更改或合并的项目,这可能很有用
    【解决方案4】:

    正如错误提示的那样。您尝试选择一个合并提交,因此您已经告诉 git 它应该针对哪个父级生成差异,然后将其应用于目标。

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 2018-04-13
      • 2017-06-10
      • 2021-01-18
      • 2023-01-05
      • 1970-01-01
      • 2013-11-18
      • 2012-06-24
      相关资源
      最近更新 更多