[英]How do I restore files that were deleted accidentally with `git rm .`?
我刚刚做了一个舞台:
git add .
当我想重置时,我使用了:
git rm .
突然所有文件都被删除了!! 我认为它应该只是删除树工作,它的行为就像我一样:
rm -rf ./*
为什么它删除了所有文件? 我应该使用什么命令来代替?
当您从索引和工作树中删除文件时,git 会注意到您在当前提交中拥有的文件现在已经消失了,因此git status
将显示这些文件已被删除。
然而,没有必要恐慌。 这只是 Git 告诉您与先前提交相比,它看到这些文件消失的方式。 这些文件仍然存在于 repo 中。 事实上,如果您现在暂存所有删除并提交,您将只有一个没有文件的新提交,但您当前的提交仍将与存储库中的所有文件一起存在。 您可以随时查看它,它会将这些文件恢复到工作目录中。
此答案中提供了有关如何从git rm
恢复文件的信息。
注意:小心:
git reset --hard
这将在这种情况下起作用(根据其他答案),但要小心一点 - 了解虽然它将所有文件恢复到最后一次(当前)提交,这意味着您将丢失索引和工作目录。 在这种情况下,您确实想要恢复所有文件(因为
git rm .
删除了所有文件),所以这不是问题。您可以使用以下命令将单个文件恢复到上次提交状态
git reset --hard [filename]
关于如何从暂存区删除文件 - 我更喜欢使用 Git Extensions,这是一种流行的开源 Git GUI 工具。 当您点击“提交”按钮时,它会打开一个提交窗口,其中显示所有已暂存和未暂存的文件以及任何更改,让您单击其中任何一个并查看更改的差异,并且有按钮可以在它们之间移动它们工作目录和索引。
但是如果你想要命令行选项,你可以使用这个命令:
git reset
将从索引中删除所有文件/更改(注意:没有句号!!)。 此外,您可以使用:
git reset [filename]
取消暂存 [filename](或文件名模式,如 *.txt)。
这与使用git reset --mixed
相同,并导致 git 将所有文件(或仅 [filename])设置回当前提交时的状态。 --mixed
选项仅重置索引,而不是工作目录,因此它不会删除文件中的任何更改,只会使文件/更改取消暂存。
如果你使用git reset --soft
它不会做任何事情 - --soft
不会重置索引或工作目录,并且由于你没有指定不同的分支或提交,它会将所有文件重置为使用现有索引和工作目录的当前提交 - 这就是您已经拥有的!
如果您使用git reset --hard
那么它将清除索引和工作目录并将文件恢复到当前提交的原始状态 - 它们将被取消暂存而不做任何更改 - 这是修复您的一种解决方案删除问题。
如果你想重置你的添加,你可以做
git reset --hard
这将使您回到执行git add .
之前的状态git add .
,并且应该恢复所有消失的文件。
尝试重置到最后一次提交,使用:
git reset HEAD --hard
所有这些重置对我都不起作用,我是多么害怕! 我的情况:我有一个空的存储库,我已经提交了 4 次。 我需要做的是在 git rm 生效之前转到特定的提交。 所以就我而言,如果上述方法不起作用,请尝试:
git log
git checkout <your-before-git-rm-commit>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.