150

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

4

16 回答 16

158

不,那些文件不见了。

(刚刚在 Linux 上检查过:git clean callsunlink(),并且没有事先备份任何东西。)

于 2011-06-07T15:03:16.007 回答
59
git clean -fdxn

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

git clean -fdx

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

于 2013-01-11T17:15:01.743 回答
43

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

于 2016-12-26T23:32:49.537 回答
21

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

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

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

于 2011-06-07T15:03:10.303 回答
16

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

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

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

于 2013-11-09T16:00:54.153 回答
16

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

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

于 2018-06-25T15:37:43.510 回答
13

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

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

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

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


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

于 2017-03-17T15:55:34.693 回答
9

我今天遇到了这个问题。

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

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

于 2011-06-11T10:08:04.880 回答
8

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

于 2014-11-18T09:23:33.227 回答
5

如果您使用的是 mac 并使用 备份Time Machine,那么您可以恢复

于 2020-03-27T03:53:12.750 回答
5

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

于 2021-05-21T22:35:53.437 回答
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 的文件夹

于 2018-09-19T12:15:26.960 回答
1

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

于 2012-11-05T19:54:06.873 回答
1

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

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

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

在 MacOS 上,您可能会对Time Machine.

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

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

无论如何,git clean -n事先仔细检查总是一个好主意

于 2021-01-22T22:39:37.103 回答
0

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

于 2019-09-17T13:12:48.173 回答
-2

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

于 2015-01-28T18:13:09.347 回答