我可以恢复删除的文件(撤消 'git clean -fdx' 操作) 吗 ?

我正在按照 制作 github 页面上的说明操作,还忘了切换到我的 git 子目录。结果,我刚刚使用 git clean -fdx 命令删除了整个文档目录。
有什么办法可以弥补这个可怕的错误吗?

134024 次浏览

没有。“ gitclean-fdx”将删除所有 git 无法从您的工作目录跟踪的文件和目录。因为 Git 不跟踪这些文件,所以它不会对这些文件进行任何备份。至少通常不会。

如果您最近对其中一个文件执行了“ git add”操作(但是中止了提交) ,那么有可能通过“ git fsck —— lost-found”找到它。这值得一试,但不要抱太大希望。

将来你应该考虑多承诺几次而不是少承诺几次。这样你至少有一个本地备份,即使你没有最终把这些提交到一个远程。

不,那些文件已经不存在了。(我在Linux上检查了一下:git clean 调用 unlink(), 而且在执行之前不会备份任何东西。)

我今天有个问题。

正如其他人所说,git 不保存文件。

唯一的方法是使用取消删除实用程序。我使用了“ extundelete”并恢复了所有内容,但是您的里程/文件系统可能有所不同。

如果在 MSBuild 中使用 git,我创建了一个目标来复制所有文件,然后执行 git clean -xdf。这样,如果您意识到删除了不想删除的内容,就可以很容易地恢复文件。看这里: http://blog.3d-logic.com/2012/11/04/safe-git-clean-with-msbuild/

git clean -fdxn

将执行 演习操作,并显示如果运行该操作,将删除哪些文件

git clean -fdx

(当然,这只有在你提前知道的情况下才有帮助,但是下次可以)

正如上面提到的@kusma,如果您是 真幸运(如果您曾经使用过“ git add”) ,那么您可以使用以下方法来提取整个对象:

git fsck | awk '{print $3}' | xargs git show | tee searchresults.log

这样,它将查找所有类型的块,收集整个差异,并添加到一个文件,您可以提取丢失的文件。在我的例子中,我丢失了整个 Java 类。

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

幸运的是,我在使用 Windows7时犯了这个错误。进入回收站,高亮显示所有已删除的文件,然后单击“还原”。成交。

IntelliJ/Android Studio 支持 从本地历史中还原文件

实际上是 是的! 这是可能的! 但不使用 git 命令。
我们所需要的只是一个文件恢复工具,如 康瓦
只要提到从它被删除的路径,并让它恢复文件。

下面是一些使用该应用程序的有用注意事项:

  1. 我强烈建议您在还原之前勾选此复选框 文件(当被删除的文件出现在恢复窗口中时) :
    Advanced Mode-> Options-> Actions-> Restore folder structure
    这样,所有的文件将通过保留该文件夹来恢复 结构,这样就可以更容易地拖放它 文件夹添加到删除该文件的路径。
  2. 最好在 USB 设备上安装恢复工具(因为下面有警告)
  3. 虽然提到在哪里恢复文件,避免选择相同的驱动器从文件被删除(再次因为下面提到的警告) ,因为目前,恢复的文件可能会覆盖其他被删除的文件还没有恢复。恢复文件到任何 USB 驱动器总是一个很好的解决方案。

警告!一旦你丢失(意外删除)了一个文件,尽量不要触摸(添加/编辑文件)驱动器从它被删除的地方,以增加成功恢复的可能性。否则,您可能会完全丢失该文件。


为什么会有用
当你删除一个文件时,实际上它并没有真正被删除。它只是标记为“删除”,所以下次当你添加/更新文件到同一个驱动器,这些旧文件被覆盖的新的。但是除非它们被覆盖,否则仍然可以读取(当然也可以恢复)这些文件。

如果您正在使用任何 Jetbrain IDE,可以选择查看文件的本地历史记录。如果您已经完成了 git clean,那么可以重新创建文件并检查文件的本地历史记录,然后从那里恢复它。

对我来说只有一个文件,对于一个完整的目录,我不知道怎么做。

我使用了一个应该添加到存储库中的代码,我使用-dfx 清理了这些代码,这样就可以恢复文件。

我尝试使用 debug,查看和链接来自 inode,testdisk 和许多其他工具出现,没有一个找到目录这个愚蠢的编写擦除了偶然。

从 source ceforge 下载 删除
您可能需要安装 E2fslibs-dev 包
运行 < br >

$ ./configure
$ make

它将为 src 文件夹中的 extundelete 生成二进制文件 在我的例子中,我错误地删除了一个文件夹

我就跑了:

$  sudo ./extundelete --restore-directory &lt;full path to FOOBAR &gt; &lt;the partition&gt;


它创建了一个名为 RESTORED _ FOLDERS 的文件夹

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

如果您使用的是 mac 并备份了 Time Machine,那么您可以还原

没有,但也许你有备份,而你自己都不知道。

这取决于那些文件在你机器上放了多久。 如果这些文件的历史超过一天,那么备份中会有很好的更改。

在 LinuxMint 上,您可能已经安装了 Timeshift备份工具。如果足够幸运的话,您的代码文件夹包含在每日备份中。

在 MacOS 上,你可能会有一个与 Time Machine的运气。

如果您的笔记本电脑/个人电脑是在 company fleet,有机会,他们也有一个备份。

如果机器在 cloud中,很可能有一个备份或 hdd snapshot

在任何情况下,事先与 git clean -n进行复核总是一个好主意

如果你使用的是 IntelliJ IDEA安卓工作室,这是很容易做到的。只需创建与您删除的名称相同的文件,然后单击该文件的 VCS-> Local History-> Show History。不幸的是,它不能与媒体文件,如 JPEG 或 PNG 图像。此外,目前您只能一个一个地恢复被删除的文件。然而,这个选项多次救了我的命,所以谢天谢地,它就在那里。

VS 代码还保留了一个可以还原的历史记录。

执行 “本地历史记录: 查找要还原的条目”(可以 cmd + shift + p 并搜索“ 恢复”)

输入您的文件名并选择您想要的版本。

通常情况下,Git 无法还原这些文件。命令 clean只删除那些未被跟踪的文件。Git 没有保留任何关于未跟踪文件的信息。 您只希望尝试一些非 Git 相关的工具来还原文件。

但是,在极少数情况下,您可能在清理之前就已经将这些文件隐藏起来了。即使在此期间丢弃了这个存储,它可能仍然存在于存储库数据库中。Git 通常在 GCing 旧版本之前等待一段时间。在这种情况下,您可以尝试恢复存储: 如何恢复丢失的 Git 存储?

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