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