在执行 'git rm -rf' 后,如何恢复已经暂存但未提交的文件?

16

在我的本地机器上,我从文件夹中删除了文件。

git init
git add --all

然后我写下了(别问我为什么! :))

git rm -rf

我现在尚未提交。我的项目中有空文件夹,在.git文件夹中有53 MB的文件,其中包含objects文件夹。

我该如何恢复我的文件?我尝试了像Drill Disc和Stellar之类的程序,但没有找到我的文件。而且我无法从GIT中回滚。

该如何恢复丢失的文件?


如果您无法通过任何“未删除”工具将它们恢复,那么它们就永远消失了。 - Sven
2
这可能对你有用:https://dev59.com/rG025IYBdhLWcg3wzZT3#6780036 - pktangyue
2个回答

13

(更新) 使用git fsck代替,它是一条内置命令,用于检索您曾经添加到Git存储库中的文件。

git fsck --lost-found --unreachable
在命令处理后,检索到的文件将被放置在 .git/lost-found/other 目录下,文件名为sha256哈希值。尽管原始名称已经丢失,但是内容将会恢复。
你可以在 .git/objects 目录中找到你的文件。
假设存在一个 .git/objects/2f/ae996f8f8f9298b41ba4fdbac3d62014f9579e 对象,你可以执行
git cat-file -p 2fae996

获取您丢失文件的内容。

但很抱歉,我不知道如何重建您的目录或自动执行此操作。


1
+1:哇,确实很奇怪。文件在那里,但使用正常的git命令无法访问。 - Daniel Hilgarth
我不担心目录,但我需要文件。 “git cat-file” - 这类似于*nix中的“cat”命令吗?我如何将文件保存在其他目录中? - user2003024
你可以像普通的Unix命令一样通过重定向保存它:git cat-file object > /path/to/where/you/want/save/it,但我认为这不是一个好主意,因为没有关于文件名的信息。 - dyng
1
可以自动完成这个任务!这是我的 PHP 代码,可能有点糟糕)) http://codepad.org/khIjLFnI - user2003024
@DanielHilgarth git show 2fae996 也可以做到这一点(真惭愧,直到今天我才知道),show 是许多低级命令的通用上层接口。 - dyng
非常感谢,我以为我丢失了所有的文件 :) - Henry

-2

你尝试过吗:

git reset --hard

?

希望可以成功 :)

在执行 git rm -rf 后,你甚至可以安全地进行硬重置。 - Flavius
1
-1:只有在使用了 rm -rf 命令后才能起作用。请参考我的回答中的解释。 - Daniel Hilgarth
1
这个命令将代码更改为最后一次提交并删除所有修改过的文件。 - Bin Wang
1
您真的应该删除这个答案。它完全没有帮助。 - Daniel Hilgarth
我做的事情和提问者几乎完全一样,唯一的区别是我在项目中已经进行得更深入了。这个答案解决了我的问题。我失去了自上次提交以来所做的所有工作,并且我已经从中吸取了教训,不再试图使用快捷方式来暂存删除的文件,但至少我没有失去整个项目。谢谢! - Taylor714

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接