如何还原使用“git rm.”意外删除的文件?

如何还原使用“git rm.”意外删除的文件?,git,ubuntu,Git,Ubuntu,我刚刚制作了一个舞台: git add . 当我想重置时,我使用: git rm . 突然所有的文件都被删除了!!我想应该是树工作被删除了,就像我做的那样: rm -rf ./* 为什么要删除所有的文件?我应该使用什么命令来代替呢?修复删除操作 当您从索引和工作树中删除文件时,git会注意到您在当前提交中拥有的文件现在已不存在,因此git status将显示这些文件已被删除 但是,没有必要惊慌。这只是Git告诉您,与之前的提交相比,它看到这些文件消失了。这些文件仍然存在于回购协议中。事实上

我刚刚制作了一个舞台:

git add .
当我想重置时,我使用:

git rm .
突然所有的文件都被删除了!!我想应该是树工作被删除了,就像我做的那样:

rm -rf ./*
为什么要删除所有的文件?我应该使用什么命令来代替呢?

修复删除操作 当您从索引和工作树中删除文件时,git会注意到您在当前提交中拥有的文件现在已不存在,因此
git status
将显示这些文件已被删除

但是,没有必要惊慌。这只是Git告诉您,与之前的提交相比,它看到这些文件消失了。这些文件仍然存在于回购协议中。事实上,如果您现在进行所有的删除和提交,您将只进行一次没有文件的新提交,但是您当前的提交仍将与repo中的所有文件一起存在。您可以随时签出它,它会将这些文件恢复到工作目录中

有关如何从git rm还原文件的信息,请访问

注意:注意:

git reset --hard
在这种情况下(根据其他答案),这会起作用,但要小心一点——要知道,虽然它会将所有文件恢复到最后一次(当前)提交,但这意味着您将丢失索引和工作目录中的所有更改。在这种情况下,您确实希望恢复所有文件(因为
git rm.
删除了所有文件),所以这不是问题

您可以使用将单个文件恢复到上次提交状态

git reset --hard [filename]

如何仅在将来从索引中删除文件 关于如何从暂存区域删除文件,我更喜欢使用Git扩展,这是一种流行的开源Git GUI工具。当您点击“提交”按钮时,它会打开一个提交窗口,显示所有暂存和未暂存的文件以及任何更改,让您单击其中任何一个并查看更改的差异,并且有一些按钮可以在工作目录和索引之间移动它们

但如果需要命令行选项,可以使用以下命令:

将从索引中删除所有文件/更改(注意:无句点!!)。此外,您还可以使用:

取消仅显示[filename](或文件名模式,如*.txt)

这与使用git reset--mixed(混合)相同,并使git将所有文件(或只是[filename])设置回当前提交时的状态。
--mixed
选项只重置索引,而不重置工作目录,因此它不会删除文件中的任何更改,它只会使文件/更改未格式化

如果您使用
git reset--soft
它不会做任何事情-
--soft
不会重置索引或工作目录,并且由于您没有指定其他分支或提交,它将使用现有索引和工作目录将所有文件重置为当前提交-这是您已经拥有的


如果您使用git reset--hard,它将清除索引和工作目录,并将文件恢复到当前提交的原始状态-这些文件将不进行任何更改而不老化-这是修复删除问题的一种解决方案。

如果您想重置添加内容,您可以这样做

git reset --hard

这将使您恢复到执行git添加之前的状态。,并应还原所有已消失的文件。

尝试使用以下命令重置为上次提交:


git复位头——硬的

所有这些复位对我来说都不起作用,我是多么害怕!我的情况是:我有一个空的存储库,我做了4次提交。我需要做的是在git rm生效之前进行特定的提交。因此,在我的情况下,如果上述方法不起作用,请尝试:

git log
git checkout <your-before-git-rm-commit>
git日志
git签出

我看不到你的委托人不是我的问题,我说了为什么在git rm之后直接删除所有文件,例如,如果你让git add。然后是git status,您将找到添加到树中的所有文件,但是如果使用git rm-rf命令,文件应该“仅”从树中删除,(git状态显示为nothing)而不是完全删除!!你写道:“我刚刚做出承诺”,但实际上你只是停滞不前是的,我错了,谢谢!!你可以纠正,非常感谢,现在我想起了前一段时间,我使用git重置——很难,我认为这是最好的解决方案。我理解为什么文件消失了,但服务器仍在运行(我说的是NodeJS服务器)。
git reset --hard
git log
git checkout <your-before-git-rm-commit>