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

时间:2011-06-07 14:56:59

标签: git git-clean

我按照making github pages上的说明操作,忘了向下移动到我的git子目录。结果,我只用git clean -fdx编写了整个文档目录 有什么办法可以解除这个可怕的错误吗?

15 个答案:

答案 0 :(得分:110)

没有。那些文件不见了。

(刚刚在Linux上检查过:git clean calls unlink(),并且事先没有备份任何内容。)

答案 1 :(得分:41)

git clean -fdxn

将执行dry run,并显示如果您运行

将删除哪些文件
git clean -fdx

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

答案 2 :(得分:17)

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

如果你最近对这些文件中的一个文件进行了'git add'(但是中止了提交),你可以通过'git fsck --lost-found'找到它。这值得一试,但不要过多地抱你的希望。

将来你应该考虑过多次经常而不是几次。这样,即使您最终没有将这些提交推送到遥控器,您至少也会拥有本地备份。

答案 3 :(得分:13)

IntelliJ / Android Studio允许restoring files from local history

答案 4 :(得分:7)

正如上面提到的@kusma,如果你幸运(如果你做过“git add”),那么你可以使用以下内容来提取整个对象:

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

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

答案 5 :(得分:7)

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

答案 6 :(得分:6)

我今天遇到了这个问题。

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

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

答案 7 :(得分:5)

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

此处还有一些使用该应用程序的有用说明:

  1. 我强烈建议您在恢复前选中此复选框 文件(当删除的文件出现在恢复窗口中时):
    Advanced Mode - > Options - > Actions - > Restore folder structure
    有了这个,所有文件都将通过保留文件夹来恢复 结构,那么拖放它会容易得多 文件夹到删除它的路径。
  2. 在USB设备上安装恢复工具更为可取(因为下面的警告)
  3. 在提到恢复文件的位置时,避免选择从删除文件的位置(再次因为下面提到的警告),因为当前恢复的文件可能会覆盖其他已删除的文件尚未恢复。将文件恢复到任何USB驱动器始终是一个很好的解决方案。
  4. 警告!一旦丢失(意外删除)任何文件,请尽量不要触摸(添加/编辑文件)驱动器的位置,以增加成功恢复的可能性。否则你可能会完全丢失该文件。

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

答案 8 :(得分:2)

如果您使用的是Mac,并使用Time Machine进行了备份,则可以还原

答案 9 :(得分:1)

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

答案 10 :(得分:1)

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

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

答案 11 :(得分:1)

不,但也许您有备份,但您甚至不知道。

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

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

在 MacOS 上,您可能会遇到 Time Machine

如果您的笔记本电脑/PC 位于 company fleet 中,则它们可能也有备份。

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

在任何情况下,事先与 git clean -n 仔细检查总是一个好主意

答案 12 :(得分:0)

幸运的是,我在使用Windows 7时犯了这个错误。我想回收bin,突出显示所有已删除的文件,然后点击" Restore"。完成。

答案 13 :(得分:0)

我使用了应该添加到存储库中的代码,并使用-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的文件夹

答案 14 :(得分:0)

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