我有两个分支大师和开发
我需要从master分支中的开发分支获取一些提交ID,所以我通过cherry-pick来实现它,但它显示了一些错误
$> git cherry-pick cf0d52b
error: Commit cf0d52b900f990300c3aa17936ddbae1476d461a is a merge but no -m option was given.
fatal: cherry-pick failed
我没有收到此错误,为什么会出现此错误以及如何摆脱此错误。
答案 0 :(得分:14)
您正尝试cherry-pick
合并。合并是由几个父母建立起来的。您必须为合并提供父ID。
您必须提供以下任何一项:
-m parent-number
/--mainline parent-number
通常你不能挑选合并,因为你不知道合并的哪一边应该被认为是主线。
此选项指定主线的父编号(从1开始),并允许cherry-pick重放相对于指定父级的更改。
使用git show
命令查看提交父项,然后您可以选择父索引或SHA-1
答案 1 :(得分:5)
此选项指定父编号(从1开始)
直到Git 2.13(2017年第二季度),这个数字可能是0! (这是不正确的)
commit b16a991见Jeff 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
将用于仅显示没有“合并哈希”的提交。对于具有大量更改或合并的项目,这可能很有用