我能否恢复已删除的文件(撤销`git clean -fdx`)?

181

我在按照制作GitHub Pages的说明操作时,忘记进入我的git子目录。结果,我使用了git clean -fdx命令,把整个文档目录都清空了。
有没有办法撤销这个可怕的错误?


2
我不确定,但我认为使用git不可能实现。然而,您的文件系统中的恢复工具可能会有所帮助。 - static_rtti
16
有趣的是,Git Community Book也建议使用 git clean -fdx 命令,但并没有警告这个操作有多么危险。我想知道有多少人因为这个看起来无害的建议而不可挽回地删除了他们的文件。 - catpnosis
8
请确保你的IDE是否有“本地历史记录”功能,就像Eclipse或IntelliJ IDE一样。这可以避免意外调用git clean而引起的许多麻烦。此外,请尝试不要养成在不检查的情况下清理项目的习惯。创建一个Powershell或Bash脚本,可以调用该脚本并在运行非常具有破坏性的清理操作之前运行git clean -fdxn,并提供确认提示。 - Josh Burgess
18个回答

8

如果你正在使用Eclipse,其中一个可能的解决方案是从Eclipse的本地历史记录中恢复。


2
我正在使用PyCharm,本地历史记录为我节省了不少麻烦。 - psychok7
1
在 IntelliJ IDEA 中也是一样的! - arthurakay
RubyMine还有本地历史记录。救了我! - Usman
所有的IntelliJ浏览器都有本地历史记录,真是太好了。我正在使用WebStorm,在找到这个功能之前,我几乎要疯掉了。三天的12小时工作日付之东流,我甚至认真考虑在办公桌上喝一瓶烈酒。 - Josh Burgess

5
如果您使用的是Mac并且备份了Time Machine,那么您可以进行恢复。

1
你救了我的命...在我读到你的评论之前,我从未想过这个。 - William Romero
@WilliamRomero 有时候在旁边看到一些好东西,我很高兴提醒你。 - Nullable

2

我需要添加一段代码到我的仓库中,然后使用-dfx进行清理,这样我就可以恢复文件了。

我尝试使用debugfs、查找和链接inode、testdisk以及许多其他工具,但都没有找到这个可恶的写入程序意外删除的目录。

从sourceforge下载extundelete
您可能需要安装e2fslibs-dev软件包
运行:

$ ./configure 
$ make 

它将在src文件夹中生成extundelete的二进制文件。在我的情况下,我错误地删除了一个名为FOOBAR的文件夹。
我只需运行:
$  sudo ./extundelete --restore-directory <full path to FOOBAR > <the partition> 


它创建了一个名为RESTORED_FOLDERS的文件夹


哇!虽然这并没有恢复我想要的文件,但这是我会记下来的东西 - 绝对会派上用场! - Ani

1
不是的,但也许你有备份却不知道。这取决于这些文件在你的计算机上存在多长时间。如果这些文件比一天还要旧,那么你的备份很可能有它们。在Linux Mint上,你可能安装了一个名为“Timeshift”的备份工具。如果你足够幸运,你的代码文件夹包含在每日备份中。在MacOS上,你可能会有使用“Time Machine”的运气。如果你的笔记本电脑/个人电脑属于“公司车队”,那么他们也有备份的机会。如果机器在云端,很可能有备份或硬盘快照。无论如何,在进行“git clean -n”之前双重检查总是一个好主意。

1

0

通常情况下,Git 无法恢复这些文件。命令 clean 仅删除未被跟踪的文件。Git 不会保留有关未跟踪文件的任何信息。 您唯一的希望是尝试一些非 Git 相关的工具来恢复文件。

但是,在极少数情况下,可能会发生在清理之前已经存储了这些文件。即使在此期间丢弃了此存储,它仍然可能存在于存储库数据库中。Git 通常会等待一段时间才会 GC 旧版本。在这种情况下,您可以尝试恢复存储:如何在 Git 中恢复已删除的存储?

这就是我能想到的所有方法 :-/


0

如果您还没有推送更改(git push),您也可以从尚未更新的服务器中恢复信息。我使用FileZilla将删除的文件带回并将其复制到本地文件中。这不是最好的方法,但它有效且避免使用控制台。


-3

幸运的是,我在使用Windows 7时犯了这个错误。 去回收站,突出显示所有已删除的文件,然后点击“还原”。 完成。


9
你的意思是什么?git clean不会把文件移动到回收站。 - MEMark

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