由于没有给出-m选项,因此不允许撤销合并的git revert <hash>。

56

我正在尝试使用“撤销”命令来恢复到Git中特定的“哈希”编号。

我正在使用以下命令:

git revert c14609d74eec3ccebafc73fa875ec58445471765

但是,我得到了以下返回的内容:

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

发生了什么事情,应该怎么做才能解决这个问题?


我想还原回到我在运行 git log 时看到的特定提交 (c14609d74eec3ccebafc73fa875ec58445471765)。


2个回答

64

你正在尝试还原一个合并提交,而git不知道要还原到哪个上级。使用-m可以让我们选择要还原到哪个上级。查看合并提交并记录下想要前往的上级。可以在git log中查看父级信息,例如:

commit d02ee0f2179def10277f30c71c5d6f59ded3c595

Merge: dd3a24c 2462a52

然后运行:

git revert <hash> -m 1

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

如果要回退到该提交版本,请执行以下操作:

git reset --hard <hash>
了解git revertgit reset之间的区别,从文档中决定你想要哪一个。 git revert是更安全的选项,但并不能完全做到你想要的。它只会撤消(一组)提交的更改。 git reset则使您移动到历史记录中的特定提交,并将重写您的历史记录。

5
manojlds,您运行的完整git log命令是什么,以查看父级? - Tola Odejayi
31
你如何确定哪个是父亲,哪个是母亲?比如说,我怎么知道要输入数字 1 还是 2 或者其他什么数字? - Matthew James Briggs
我最初将一个开发分支合并到了 master 分支。当我撤销这个提交时,我使用 -m 的值为 1,这样就解决了问题。 - Hasan Akhtar
5
@MatthewJamesBriggs,我在“如何确定哪个是父提交?”这个问题中发现了这篇有用的答案:https://blog.experteer.engineering/what-are-parents-on-git-merge-commits.html。 - Michael Wegter

4
我想要回滚到之前的状态... 那么你不需要使用 git revert,至少不是这样。git revert 用于撤销特定提交所做的更改。你要做的是撤销或者回滚在该提交后进行的所有更改。在这里应该使用 git reset 命令。运行 git reset --hard c14609d74eec3ccebafc73fa875ec58445471765 可以将您的分支、索引和工作树完全重置为该特定提交。请注意通常的预防措施:如果其他人已经获取了较新的提交,则像这样从历史记录中删除它们会使事情变得复杂。如果您想要创建一个新的提交,只需将其状态恢复到提交 c14609d74eec3ccebafc73fa875ec58445471765 的状态,可以使用 git rm 和 git checkout 命令。
git rm -r .
git checkout c14609d74eec3ccebafc73fa875ec58445471765 .

需要使用rm命令,以确保新添加的文件也被删除。

这样,您就可以在本地历史记录的基础上创建一个新的提交,撤消自c14609d74eec3ccebafc73fa875ec58445471765以来的所有更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接