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

时间:2016-05-02 06:12:32

标签: git cherry-pick

我有两个分支大师和开发

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

$> git cherry-pick cf0d52b

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

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

4 个答案:

答案 0 :(得分:14)

您正尝试cherry-pick合并。合并是由几个父母建立起来的。您必须为合并提供父ID。

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

  

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

     

通常你不能挑选合并,因为你不知道合并的哪一边应该被认为是主线。

     

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

如何找出提交父母的内容?

使用git show命令查看提交父项,然后您可以选择父索引或SHA-1

enter image description here

答案 1 :(得分:5)

  

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

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

commit b16a991Jeff King (peff)(2017年3月15日) Junio C Hamano -- gitster --于2017年3月17日commit 9c96637合并)

  

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”)。

答案 2 :(得分:1)

正如错误所暗示的那样。你试图选择一个合并提交,所以你告诉git它应该生成哪个父项应该应用于目标的diff。

答案 3 :(得分:0)

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