【问题标题】:error: commit is a merge but no -m option was given错误:提交是一个合并,但没有给出 -m 选项
【发布时间】:2017-06-10 01:49:28
【问题描述】:

当我做 git cherry-pick 时,我得到了这个错误,我该如何解决?

$ git cherry-pick  XXXXXXXXXXXXX                                                                                                                                          
error: commit XXXXXXXXXXXXX is a merge but no -m option was given.
fatal: cherry-pick failed
$ git cherry-pick
    -m, --mainline <n>    parent number
$ git cherry-pick -m 1234 XXXXXXXXXXXXX
$ error: commit XXXXXXXXXXXXX does not have parent 1234
fatal: cherry-pick failed

【问题讨论】:

  • 如果添加消息会怎样?
  • 如果你给出一个建议的选项?
  • 我已经更新了帖子
  • 合并的父编号从 1 开始,一直计数到最大的父编号。换句话说,父#1 是第一父,父#2 是第二父,父#3 是章鱼合并的第三父,依此类推。您希望从父母 #1234 那里得到什么?

标签: git


【解决方案1】:

我认为帮助/手册页非常清楚地解释了您需要 -m 参数的原因,并且错误消息非常清楚地表明您需要它:

-m 父编号,--mainline 父编号 通常你不能挑选合并,因为你不知道 合并的哪一侧应该被认为是主线。这 选项指定父编号(从 1 开始) 主线并允许cherry-pick重播相对于 指定的父级。

【讨论】:

  • 我不会说“很清楚”,“cherry-pick”是什么意思,“side of the merge”是什么意思,“mainline”是什么意思,“parent number”是什么意思“重播更改”是什么意思。这里使用了很多相当不清楚的俚语。除非你很习惯 git,否则我怀疑你会知道这些术语。
  • 像大多数 git 命令一样非常不直观。你合并了一些东西,你想撤销它,但你不能。首先你必须阅读无意义的文档,因为它根本没有帮助,你最终会复制和粘贴一些随机命令并交叉手指它可以工作。
【解决方案2】:

我在使用git revert 恢复合并时遇到了同样的错误(功能分支结果很糟糕)。 -m 有点令人困惑。它不是在寻找消息。我认为它只是想知道您想要恢复的给定提交有多远(要恢复多少次提交)

大多数时候它只是 1。即您只想在合并之前返回提交(我提供的提交哈希)。所以解决办法是:

git revert -m 1 <git_hash_for_merge>

【讨论】:

  • 您希望从您引用的提交中后退的提交数。这意味着我想回到我提供的提交哈希之前的第一次提交
猜你喜欢
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 2016-08-26
  • 2014-08-09
  • 2016-04-06
  • 2020-12-14
相关资源
最近更新 更多