我可以撤消`git clean -fdx`吗?

Eri*_*ric 108 git git-clean

我正在按照制作github页面的说明,忘记进入我的git子目录.结果,我只是使用了一个完整的文档目录git clean -fdx.有什么办法可以解除这个可怕的错误吗?

Mat*_*Mat 120

不,那些文件消失了.

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

  • 如果您使用的是像RubyMine,Eclipse等高级IDE,那么它可能会有已删除文件的本地历史记录,您可能能够恢复它们. (28认同)
  • 在PyCharm中你也可以恢复它们.右键单击包含它们的文件夹,单击"本地历史记录",找到删除并单击"还原". (4认同)
  • @Usman给我留言 使用Eclipse,我可以通过"从本地历史记录恢复..."选项获取我的文件:http://i.imgur.com/XWNLOk5.gifv (2认同)

Pet*_*tai 45

git clean -fdxn
Run Code Online (Sandbox Code Playgroud)

将进行干运行,并显示如果您运行将删除哪些文件

git clean -fdx
Run Code Online (Sandbox Code Playgroud)

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

  • 除此之外,`-n`适用于大多数git命令(以及许多其他*nix命令). (7认同)

val*_*aca 43

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

\n

执行\xe2\x80\x9c本地历史记录:查找要恢复\xe2\x80\x9d的条目(可以cmd+shift+p并搜索\xe2\x80\x9c恢复\xe2\x80\x9d)

\n

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

\n

  • 错误地运行了错误的命令,你为我节省了很多时间。 (5认同)

kus*_*sma 17

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

如果你最近对这些文件中的一个文件做了'git add'(但是中止了提交),你有可能用'git fsck --lost-found'找到它.这值得一试,但不要太过于希望.

在未来你应该考虑相当多次承诺,而不是几次.这样,即使您最终没有将这些提交推送到远程,也至少会有本地备份.

  • 读完这个问题后不久,我给 Git 写了一个补丁,它添加了一个配置变量来备份每个删除的文件。也许它对其他人有用?https://github.com/kusma/git/tree/work/clean-backup (2认同)
  • 我今天很幸运!!!感谢“git fsck --lost-found”。我使用以下命令获取所有更改: git fsck | awk '{print $3}' | xargs git show | tee searchresults.log 因为我想要我添加然后删除的整个文件,所以我可以从日志中获取它。:) (2认同)

Raj*_*aul 15

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

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

  • 在相同位置创建具有相同文件名的文件。在 IDE 中右键单击并单击“显示历史记录”。复制粘贴其中的内容。很好的建议@Rajesh。谢谢。 (2认同)

Ser*_*vic 15

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

  • 这救了我!谢谢!! (2认同)

Y2i*_*Y2i 14

IntelliJ/Android Studio允许从本地历史记录中恢复文件.

  • PyCharm 也支持这一点!谢谢你的回答。我很高兴我在前 3 名“不抱歉你运气不好”之后阅读了其余的答案。 (6认同)
  • JetBrains(和您)救了我的命! (3认同)

Mar*_*les 8

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

git fsck | awk '{print $3}' | xargs git show | tee searchresults.log
Run Code Online (Sandbox Code Playgroud)

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


dou*_*llj 7

我今天遇到了这个问题.

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

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


Abh*_*nav 7

如果您正在使用Eclipse,那么可能的解决方案之一就是从Eclipse的本地历史中恢复.

  • 即时通讯使用PyCharm和当地历史救了我 (2认同)

Jus*_*dow 5

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

另外,以下是使用该应用程序的一些有用说明:

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

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

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


Nul*_*ble 5

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