繁体   English   中英

如何恢复使用`git rm .`意外删除的文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM