关于ubuntu:如何使用`git rm .`恢复被意外删除的文件?

How do I restore files that were deleted accidentally with `git rm .`?

我刚刚做了一个舞台:

1
git add .

当我想重置时,我使用:

1
git rm .

突然所有文件都被删除了!!我想应该只是删除了正在工作的树,它的行为就跟我一样:

1
rm -rf ./*

为什么要删除所有文件?我应该用什么命令来代替呢?


修复删除内容

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

不过,没必要惊慌。这只是Git告诉您的方式,与以前的提交相比,它看到那些文件消失了。这些文件仍然存在于回购协议中。事实上,如果您现在准备好所有的删除并提交,那么您只需要一个没有文件的新提交,但是您当前的提交仍然存在于repo中的所有文件中。您可以随时将其签出,它会将这些文件恢复到工作目录中。

有关如何从git rm恢复文件的信息,请参阅此答案。

Note: Be careful with:

1
git reset --hard

This will work in this case (per the other answers), but be a little careful with it - understand that while it will restore all files to the last (current) commit, that means you will lose all changes both in the index and the working directory. In this case, you really do want to restore all files (since the git rm . deleted all of them), so that's not a problem.

You can restore individual files to last commit status with

1
git reset --hard [filename]

如何以后只从索引中删除文件

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

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

1
git reset

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

1
git reset [filename]

仅取消对[文件名]的存储(或文件名模式,如*.txt)。

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

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

如果您使用git reset --hard,那么它将清除索引和工作目录,并将文件还原到当前提交的原始条件-它们将不进行任何更改地取消保存-这是解决删除问题的一个解决方案。


如果你想重新设置你的添加,你可以这样做

1
git reset --hard

这将使您在执行git add .之前恢复到状态,并应恢复已消失的任何文件。


尝试重置为最后一次提交,方法是:

git reset HEAD --hard