【问题标题】:git revert <hash> not allowed due to a merge but no -m option was givengit revert <hash> 由于合并而不允许,但没有给出 -m 选项
【发布时间】:2014-08-09 16:24:57
【问题描述】:

我正在尝试使用“revert”命令恢复到 git 中的某个“哈希”数字。

我正在使用以下命令:

git revert c14609d74eec3ccebafc73fa875ec58445471765

但是,我得到以下返回:

错误:提交 c14609d74eec3ccebafc73fa875ec58445471765 是一个合并,但没有给出 -m 选项。
致命:还原失败

作为一个新的 git 用户,请你解释一下发生了什么以及我必须做些什么来解决这个问题。

我想恢复到我在运行 git log 时看到的这个特定提交 (c14609d74eec3ccebafc73fa875ec58445471765)。

【问题讨论】:

标签: git github revert git-revert


【解决方案1】:

您正在尝试还原合并提交,而 git 不知道要还原到哪个父级。 -m 允许我们选择要选择的父母。查看合并提交并记下您要转到哪个父级。父信息可见git log,例如:

提交 d02ee0f2179def10277f30c71c5d6f59ded3c595

合并:dd3a24c 2462a52

然后运行:

git revert <hash> -m 1

其中1 表示父编号 1 (dd3a24c)。

如果您试图将提交恢复到 ,请执行以下操作:

git reset --hard <hash>

从文档中了解git revertgit reset 之间的区别,然后决定你想要哪一个。 git revert 是更安全的选择,但并不能真正做到你想要的。它只是恢复(一组)提交的更改。 git reset 让您移动到历史中的特定提交,并将重写您的历史。

【讨论】:

  • manojlds,你跑来查看父级的完整 git log 命令是什么?
  • 你如何确定哪个父母是哪个?即我怎么知道输入数字1 vs. 2 还是别的什么?
  • 我最初将一个开发分支合并到master。还原提交时,我使用 1 作为 -m 的值,这成功了
【解决方案2】:

我想回到...

那你不要git revert,至少不要这样。 git revert 用于恢复在该提交中所做的特定更改。您正在寻找的是还原或撤消在提交之后所做的所有更改。

git reset 是这里使用的命令。

git reset --hard c14609d74eec3ccebafc73fa875ec58445471765 将您的分支、索引和工作树完全重置为该特定提交。

请注意,通常的预防措施适用:如果其他人已经获取了以后的提交,那么像这样将它们从历史记录中删除会使事情变得复杂。如果你想创建一个新的提交,它只是将状态恢复到提交 c14609d74eec3ccebafc73fa875ec58445471765 的状态,你可以使用git rmgit checkout

git rm -r .
git checkout c14609d74eec3ccebafc73fa875ec58445471765 .

(需要rm 以确保新添加的文件也被删除。) 然后,您可以在本地历史记录之上创建一个新提交,这将撤消自 c14609d74eec3ccebafc73fa875ec58445471765 以来的所有更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多