在上下文中:
git revert HEAD~2 myFile
fatal: bad revision '/Users/rose/gitTest/myFile'
我确定HEAD~2存在。
编辑琥珀色是正确的。我打算使用reset
代替revert
。
答案 0 :(得分:72)
如果您只想将单个文件恢复到给定提交中的状态,您实际上想要使用checkout
命令:
git checkout HEAD~2 myFile
revert
命令用于恢复整个提交(并且它不会将恢复为提交;它实际上只是恢复 make 的更改提交 - 如果您在指定的提交之后有另一个提交,则不会还原以后的提交。
答案 1 :(得分:19)
我在IntelliJ中遇到了这个错误,这些答案都没有帮助我。所以我在这里解决了这个问题。
不知何故,我的一个子模块添加了一个.git
目录。删除后返回所有git功能。
答案 2 :(得分:7)
git revert
不接受文件名参数。你想要git checkout
吗?
答案 3 :(得分:6)
我有一个"致命:糟糕的修订"使用Idea / Webstorm,因为我在另一个内部有一个git目录,没有使用正确的子模块或子树。
我检查了.git
dirs:
find ./ -name '.git' -print
答案 4 :(得分:4)
来自文档:
给定一个或多个现有提交,还原相关修补程序引入的更改...
myFile
被解释为提交 - 因为git revert
不接受文件路径;只提交
要更改一个文件以匹配之前的提交,请使用git checkout
git checkout HEAD~2 myFile
答案 5 :(得分:1)
我与Intellij有类似的问题。问题是有人将我要在Intellij中尝试比较的文件添加到了.gitignore,而没有从Git中实际删除该文件。
答案 6 :(得分:0)
为什么要在那里指定myFile
?
Git revert会恢复您指定的提交。
git revert HEAD~2
恢复HEAD~2
提交
git revert HEAD~2 myfile
还原HEAD~2
和myFile
我认为myFile
是您要还原的文件?在那种情况下使用
git checkout HEAD~2 -- myFile
答案 7 :(得分:0)
如果要删除任何提交,则可能需要使用git rebase命令
git rebase -i HEAD~2
它将显示最后2条提交消息,如果删除提交消息并保存该文件,则删除提交将自动消失...
答案 8 :(得分:0)
在我的情况下,我有一个不一致的状态,该文件(带有错误的提交哈希)实际上没有添加到Git中,这与IntelliJ的状态有些冲突。 在命令行上使用git手动添加文件对我来说解决了这个问题。