85

在上下文中:

git revert HEAD~2 myFile
fatal: bad revision '/Users/rose/gitTest/myFile'

我确定 HEAD~2 存在。

编辑琥珀是正确的。我的意思是使用reset而不是revert.

4

9 回答 9

86

如果您只想将单个文件恢复到给定提交中的状态,您实际上想要使用以下checkout命令:

git checkout HEAD~2 myFile

revert命令用于恢复整个提交(它不会将您恢复该提交;它实际上只是恢复该提交所做的更改- 如果您在指定的提交之后有另一个提交,则以后的提交将不会被恢复)。

于 2013-01-27T18:43:06.423 回答
20

我在 IntelliJ 中遇到了这个错误,这些答案都没有帮助我。所以这就是我解决它的方法。

不知何故,我的一个子模块添加了一个.git目录。在我删除它后,所有 git 功能都返回了。

于 2016-05-25T02:48:48.563 回答
8

git revert不带文件名参数。你想要git checkout吗?

于 2013-01-27T18:43:16.107 回答
6

我对 Idea / Webstorm 有一个“致命:错误修订”,因为我在另一个目录中有一个 git 目录,而没有使用正确的子模块或子树。

我检查了.git目录:

find ./ -name '.git' -print
于 2017-01-23T10:06:33.530 回答
4

Git revert 只接受提交

从文档:

给定一个或多个现有提交,还原相关补丁引入的更改...

myFile被解释为提交 - 因为git revert不接受文件路径;只提交

更改一个文件以匹配先前的提交

要更改一个文件以匹配先前的提交 - 使用git checkout

git checkout HEAD~2 myFile
于 2013-01-27T18:45:42.153 回答
1

我对 Intellij 有类似的问题。问题是有人将我试图在 Intellij 中比较的文件添加到 .gitignore,而实际上没有从 Git 中删除该文件。

于 2018-06-20T16:16:38.930 回答
0

如果要删除任何提交,则可能需要使用 git rebase 命令

git rebase -i HEAD~2

它将向您显示最后 2 条提交消息,如果您删除提交消息并保存该文件,删除的提交将自动消失...

于 2013-01-28T06:18:02.713 回答
0

你为什么要在myFile那里指定?

Git revert 恢复您指定的提交。

git revert HEAD~2

恢复HEAD~2提交

git revert HEAD~2 myfile

恢复HEAD~2myFile

我拿myFile的是您要还原的文件吗?在这种情况下使用

git checkout HEAD~2 -- myFile

于 2013-01-27T18:44:23.023 回答
0

在我的情况下,我有一个不一致的状态,其中有问题的文件(带有错误的提交哈希)实际上没有添加到 Git,这与 IntelliJ 的状态发生了某种冲突。在命令行上使用 git 手动添加文件为我解决了这个问题。

于 2018-07-10T11:52:16.960 回答