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

问题描述 投票:0回答:5

我有两个分支master和development

我需要从主分支中的开发分支获取一些提交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
5个回答
50
投票

您正在尝试

cherry-pick
合并。合并是由几个父母建立的。您必须向合并提供父 ID。

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

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

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

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


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

使用

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


11
投票

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

在 Git 2.13(2017 年第 2 季度)之前,该数字可能为 0! (这是错误的)

请参阅Jeff King (peff)

提交 b16a991
(2017 年 3 月 15 日)。
(由 Junio C Hamano -- gitster
 --
合并于
commit 9c96637,2017 年 3 月 17 日)

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

cherry-pick 和 revert 命令使用

OPT_INTEGER()

 来解析 
--mainline
。 stock 解析器足够聪明,可以拒绝非数字的废话,但它不知道父计数从 1 开始。

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

$ git cherry-pick -m 0 $merge error: commit ... is a merge but no -m option was given.
  
  
正确的诊断是“

-m 0

”不是指第一个父母(“
-m 1
”指的是)。 


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


2
投票
尝试使用

git log --no-merges

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


0
投票
在某些情况下,如果你找不到父提交,

您可以通过在合并之前选择提交来执行以下操作。

因此,如果您在任何合并之前有特定的提交,则可以这样做。

git 樱桃挑选

此外,多个提交 ID

git 樱桃挑选 .....

© www.soinside.com 2019 - 2024. All rights reserved.