繁体   English   中英

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

[英]Can I restore deleted files (undo a `git clean -fdx`)?

我按照有关制作 github 页面的说明进行操作,却忘记向下移动到我的 git 子目录中。 结果,我只是用git clean -fdx对整个文档目录进行了核对。
有什么办法可以弥补这个可怕的错误吗?

不,那些文件不见了。

(刚刚检查了 Linux: git clean 调用unlink() ,并且没有事先备份任何内容。)

git clean -fdxn

将进行 试运行,并告诉您运行时会删除哪些文件

git clean -fdx

(当然,这只有在您提前知道这一点时才有用,但下次)

IntelliJ/Android Studio 允许从本地历史恢复文件

不会。“git clean -fdx”将删除 git 未从您的工作目录中跟踪的所有文件和目录。 由于 Git 不跟踪这些文件,因此不会对这些文件进行任何备份。 至少通常不会。

如果您最近对其中一个文件执行了“git add”(但中止了提交),则有可能使用“git fsck --lost-found”找到它。 值得一试,但不要抱太大希望。

将来,您应该考虑宁可频繁地提交几次,也不要太少地提交几次。 这样你至少会有一个本地备份,即使你最终没有将这些提交推送到远程。

如果您使用的是任何 Jetbrains IDE,则可以选择查看文件的本地历史记录。 如果您已经完成git clean ,您可以重新创建文件并检查文件的本地历史记录并从那里恢复。

为我工作了一个文件。 对于一个完整的目录,我不知道该怎么做。

正如上面提到的@kusma,如果你很幸运(如果你曾经做过“git add”),那么你可以使用以下命令来提取整个 object:

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

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

其实的。 这个有可能! 但不使用 git 命令。
我们所需要的只是一个像Recuva这样的文件恢复工具。
只需提及删除它的路径,然后让它恢复文件。

这里还有一些使用该应用程序的有用说明:

  1. 我强烈建议您在恢复文件之前选中此复选框(当已删除的文件出现在恢复窗口中时):
    Advanced Mode -> Options -> Actions -> Restore folder structure
    有了这个,您的所有文件都将通过保留文件夹结构来恢复,因此只需将该文件夹拖放到它被删除的路径中就会容易得多。
  2. 在 USB 设备上安装恢复工具更可取(因为下面的警告)
  3. 在提及恢复文件的位置时,请避免选择删除文件的同一驱动器(再次因为下面提到的警告),因为目前,恢复的文件可能会覆盖尚未恢复的其他已删除文件。 将文件恢复到任何 USB 驱动器始终是一个很好的解决方案。

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


为什么有效
当你删除一个文件时,实际上它并没有真正被删除。 它只是标记为“已删除”,因此下次当您将文件添加/更新到同一驱动器时,这些旧文件将被新文件覆盖。 但在它们被覆盖之前,仍然可以读取(当然也可以恢复)文件。

我今天遇到了这个问题。

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

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

如果您使用IntelliJ IDEAAndroid Studio ,则可以轻松完成。 只需创建与您删除的名称相同的文件,然后单击该文件的VCS -> Local History -> Show History 不幸的是,它不适用于 JPEG 或 PNG 图像等媒体文件。 此外,目前您只能一个接一个地恢复已删除的文件。 然而,这个选项多次救了我的命,所以谢天谢地,它就在那里。

如果您正在处理 Eclipse,则可能的解决方案之一是从 Eclipse 的本地历史记录中恢复。

如果您使用的是 Mac 并使用Time Machine备份,则可以恢复

我使用了应该添加到存储库中的代码,并使用 -dfx 进行了清理,我可以恢复文件。

我尝试使用 debugfs,从 inode、testdisk 和许多其他出现的工具中查找和链接,但没有人找到这个愚蠢的写作意外删除的目录。

从 sourceforge 下载extundelete
您可能需要安装e2fslibs-dev package

$ ./configure 
$ make 

它将在 src 文件夹中生成用于 extundelete 的二进制文件在我的情况下,我错误地删除了一个文件夹。 让我们称之为 FOOBAR

我刚跑:

$  sudo ./extundelete --restore-directory <full path to FOOBAR > <the partition> 


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

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

不,但也许你有一个备份,甚至不知道它。

这取决于这些文件在您的机器上放置了多长时间。 如果这些文件超过一天,则您的备份中有很好的更改。

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

在 MacOS 上,您可能会对Time Machine感到幸运。

如果您的笔记本电脑/PC 在company fleet中,那么他们也有可能拥有备份。

如果机器在cloud中,很可能有备份或硬盘snapshot

无论如何,最好事先仔细检查git clean -n

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

VS Code 还保留您可以从中恢复的历史记录。

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

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

通常情况下,Git 无法恢复这些文件。 命令clean仅删除那些未跟踪的文件。 Git 不保留有关未跟踪文件的信息。 您只希望尝试一些与 Git 无关的工具来恢复文件。

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

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

幸运的是,我在使用 Windows 时犯了这个错误 7. 进入回收站,突出显示所有已删除的文件并单击“恢复”。 完毕。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM