为什么git回复抱怨缺少-m选项?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (59)

所以我正在和其他人一起做一个项目,有很多个GitHub分叉在工作。有人刚刚解决了一个问题,我和他的叉子合并了,但后来我意识到我可以找到一个更好的解决方案。我想恢复我刚才所做的承诺。我试着用git revert HEAD但它给了我一个错误:

fatal: Commit <SHA1> is a merge but no -m option was given.

那是什么意思?当我合并并提交时,我确实使用-m选项来表示“合并为<username>“

我在这里做错什么了?

提问于
用户回答回答于

假设另一个人在foo之上创建了一个BAR,但是同时创建了Baz,然后合并了,给出了

$ git lola
*   2582152 (HEAD, master) Merge branch 'otherguy'
|\  
| * c7256de (otherguy) bar
* | b7e7176 baz
|/  
* 9968f79 foo

无骰子git revert:

$ git revert HEAD
fatal: Commit 2582152... is a merge but no -m option was given.

使用git revert

$ git revert --no-edit -m 1 HEAD
[master e900aad] Revert "Merge branch 'otherguy'"
 0 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 bar

有效删除bar产生了一段历史

$ git lola
* e900aad (HEAD, master) Revert "Merge branch 'otherguy'"
*   2582152 Merge branch 'otherguy'
|\  
| * c7256de (otherguy) bar
* | b7e7176 baz
|/  
* 9968f79 foo

但我怀疑你想扔掉合并提交:

$ git reset --hard HEAD^
HEAD is now at b7e7176 baz

$ git lola
* b7e7176 (HEAD, master) baz
| * c7256de (otherguy) bar
|/  
* 9968f79 foo

用户回答回答于

默认情况下git revert拒绝还原合并提交,因为这实际上意味着含糊不清。我猜你的HEAD实际上是合并提交。

如果要还原合并提交,则必须指定要考虑的合并的父节点为主主干,即要还原到什么。

通常,这将是家长的第一位,例如,如果在master并做到了git merge unwanted,然后决定恢复unwanted。第一个家长是你的预合并。master分支和第二个父级将是unwanted

在这种情况下,可以:

git revert -m 1 HEAD

扫码关注云+社区