Cherry pick 显示没有给出 -m 选项错误

Posted

技术标签:

【中文标题】Cherry pick 显示没有给出 -m 选项错误【英文标题】:Cherry pick shows no -m option was given error 【发布时间】: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 says "...38c74d is a merge but no -m option was given"的可能重复 【参考方案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 它应该针对哪个父级生成差异,然后将其应用于目标。

【讨论】:

以上是关于Cherry pick 显示没有给出 -m 选项错误的主要内容,如果未能解决你的问题,请参考以下文章

什么是Cherry-Pick IDEA中怎么使用Cherry-Pick

git cherry-pick 报错 fatal: bad object

git cherry-pick

Git知识总览 Git中的mergerebasecherry-pick以及交互式rebase

git执行cherry-pick时修改提交信息

Git cherry-pick