Git 恢复意外丢弃的未提交文件

Git 恢复意外丢弃的未提交文件,git,Git,我意外地放弃了所有未提交的更改。我做了git reflog秀 f1bb72c头@{0}:丢弃:[1d5f4f1a481165c24a46addbef7d74a5de3ff9c6] 我怎样才能找回它 如果这些文件根本没有添加到Git中(如果您没有执行Git add),那么Git对这些文件一无所知。所以你不能让他们复活 如果您将文件添加到Git中,但意外地删除了它们,并将索引更新为目录的当前状态,那么您将很难找到文件。问题是-虽然文件在Git中,但您当前的历史记录中没有对它们的引用,您所拥有的只是压

我意外地放弃了所有未提交的更改。我做了git reflog秀

f1bb72c头@{0}:丢弃:[1d5f4f1a481165c24a46addbef7d74a5de3ff9c6]


我怎样才能找回它

如果这些文件根本没有添加到Git中(如果您没有执行Git add),那么Git对这些文件一无所知。所以你不能让他们复活

如果您将文件添加到Git中,但意外地删除了它们,并将索引更新为目录的当前状态,那么您将很难找到文件。问题是-虽然文件在Git中,但您当前的历史记录中没有对它们的引用,您所拥有的只是压缩Git对象的数量

但如果这些文件对你来说如此珍贵,我会这样做:

  • .git/objects
    目录中查找从现在到添加时的某个已知日期之间创建的所有文件(忽略
    info
    pack
    dirs)
  • 检查每个git对象(连接目录的2个符号和文件的38个符号),然后执行
    git cat-p[hash]
    直到找到blob为止。如果您记住了这些文件中的一些独特单词,则可以使用
    grep

如果您没有提交暂存、或隐藏所做的更改,则无法恢复这些更改

编辑:恢复丢失的更改。根据建议添加此内容(在评论中)。这还包括下面他回答(*)中的几个SO链接,我发现这些链接非常有用

  • 如果您曾经提交过一些更改,并且丢失了该提交(如在分离状态下提交),您可以使用
    reflog
    找到该提交。看这个*

  • 如果您丢失了上一次更改的阶段,您也可以恢复。看这个*。(我本人从未使用过或尝试过)

  • 如果隐藏了更改,也可以使用
    pop
    apply
    恢复更改。(我不确定弹出/丢弃的存储是否也可以恢复未提交的存储)。你可能会发现这很有用


如果有任何人可以建议任何其他方法,我会进一步编辑此答案以添加它们

这些文件是以前添加的。我对文件所做的更改已被删除。因此,这将取决于您是否添加了这些更改。的可能重复项请勿从其他地方复制内容(),但没有明确的属性。这被视为剽窃。看见