【问题标题】:Is it still possible to restore deleted untracked files in git?是否仍然可以在 git 中恢复已删除的未跟踪文件?
【发布时间】:2012-04-02 18:00:58
【问题描述】:

假设昨天我在我的主分支上做了一些更改,但我忘了添加、提交它们。早上我做了

git reset --hard

在这种情况下是否可以恢复已删除的文件?

【问题讨论】:

  • 如果您在某个时候碰巧git add 这些文件,即使您从未提交它们,它们仍将作为 blob 挂起,直到它们被垃圾收集(大约两周内)。 git fsck 会将对象列为dangling or unreachable。然后您可以使用git cat-file -p deadbeef > old-file-name 来恢复它们。
  • Pod's answer 已经涵盖了这个,哎呀!)

标签: git git-reset


【解决方案1】:

一些更好的 IDE 将您的文件作为本地历史记录来跟踪。如果您从外部删除了文件(例如,git reset),您应该能够在 IDE 中单击父目录并选择“与本地历史记录比较”。

我在PHPStorm IDE 中成功使用了此功能,当时我的未跟踪文件被某个实用程序清除了...

【讨论】:

  • 对于 Eclipse,导航到文件所在的文件夹/包(项目资源管理器或包资源管理器视图),右键单击,然后从上下文菜单中选择 Restore from Local History...
  • omg... 你救了我的命。我在零提交项目中使用git reset --hard,这意味着git fsck --lost-found 不起作用。幸运的是,我阅读了您的答案并在 WebStorm 中使用了 revert history 并成功获得了擦除代码...
  • 但要小心,它不适用于 WebStorm(和其他 Jetbrains 产品)中排除的目录/文件 - 显然不应该 =)
  • @RuslanMakrenko 很好 :-) 只希望不排除文件:-)
  • 谢谢!在 PHPStorm 2019.1 中,右键单击文件夹名称,本地历史 > 显示历史。然后,选择并还原要还原的文件。
【解决方案2】:

git reset --hard是一个非常危险的命令,下次使用时要小心:)

如果您对这些文件没有任何提交,似乎您没有机会恢复它们。

否则,reflog 命令可以帮助您。

【讨论】:

    【解决方案3】:

    git reset --hard 不会删除未跟踪的文件。不过,git clean 会。

    但是,如果您 git add 文件,请不要 git commit 他们然后运行 ​​git reset --hard 这些文件丢失。

    不过没关系,因为可以恢复,如this answer所示。 (好吧,直到下一个git gc)。

    【讨论】:

      【解决方案4】:

      在 Intellij 中如何恢复未跟踪的还原更改

      第一步:选择文件夹,右键点击

      Setp 2:转到本地历史记录,然后转到显示历史记录

      第 3 步:选择您意外还原的未跟踪文件。然后在右侧面板中选择这些文件并还原更改,您将获得还原格式的文件。

      【讨论】:

        【解决方案5】:

        注意自从发布了接受的答案以来,步骤似乎有所改变。但想法保持不变。

        为了补充已接受的答案,我能够使用 Webstorm 2016 恢复已删除的文件。

        1. 首先,我在使用 git git clean -f 进行强制清理时丢失了文件。
        2. 为了恢复它,我进入了 Webstorm 并执行了以下步骤:

          • 转到您的项目的项目选项卡,右键单击以转到“本地历史记录”下的“显示历史记录”。 (As shown in this picture.)

          • 单击“显示历史记录”后,可以看到弹出窗口,其中包含“外部更改 -> 还原”。单击以还原右侧所需的文件。 (As shown in the attached picture.)

          • 完成上述 2 个步骤后,您应该会看到您的文件返回到“项目”选项卡中。 “本地历史”弹出窗口将显示类似于此附图中的内容。 Reverted to External Change您将获得将其添加到 Git 的选项。

          • 要取消跟踪,只需从命令行执行 git reset HEAD <filename>

        【讨论】:

          【解决方案6】:

          git fsck 或许能帮到你。

          如果您还没有完成垃圾收集,它可能会对您有所帮助。 获得 blob id 后,您可以说:

          git show {blobId}

          【讨论】:

            【解决方案7】:

            您无法从 git 访问以前版本的未跟踪已删除文件,因为它们不存在。我会从一些备份中恢复它们(也许 ide/编辑器留下了隐藏的备份文件?),或者,我会避免在该文件系统上工作太多并开始搜索恢复工具。

            【讨论】:

            • 编辑好!我无意中丢弃了文件中未跟踪的更改(诅咒 Github 应用程序),但我意识到我仍然在 Atom 中打开了文件,只需点击“撤消”即可恢复我的更改。
            • @henrebotha,嗨!这只是发生在我身上,但不幸的是我没有在 git 硬重置时打开我的原子,你知道有什么可能的方法可以拯救我吗?非常愚蠢的是,我的未跟踪文件中有很多东西。
            • @henrebotha,问题是我在关闭原子本身之前已经关闭了原子中的文件,因此没有打开的文件缓冲区要撤消。
            • @gdad-s-river 除非 Atom 改变了它的工作方式(或者你以一种奇怪的方式配置它),否则你应该能够打开文件并点击撤消。
            猜你喜欢
            • 2017-05-10
            • 1970-01-01
            • 2020-05-10
            • 2011-11-27
            • 1970-01-01
            • 2018-09-06
            • 2022-01-27
            • 2018-07-21
            • 2021-02-24
            相关资源
            最近更新 更多