我丢失了所有隐匿的更改。我如何找回他们?

时间:2020-03-08 15:53:40

标签: laravel git

由于笔记本电脑没有电池,我突然断电。我该如何恢复所有隐匿的工作?

enter image description here

看看那里没有任何东西。

1 个答案:

答案 0 :(得分:2)

上一步:首先备份存储库根目录中的.git/文件夹。
某些操作可能会触发git的垃圾回收,这可能会删除您希望恢复的文件,制作.git/文件夹的副本将使您可以随意重播尝试。


  1. 存储目录和reflog存储在文件.git/logs/refs/stash中。确认此文件为空:

    cat .git/logs/refs/stash
    
  2. 运行git fsck,以查看是否显示有关无效对象的错误。

  3. git fsck将列出仍存储在git中但未被任何分支,标记或reflog引用的对象。
    您正在寻找更具体的提交,运行:

    git fsck | grep commit > dangling-commits.txt
    
  4. 检查每个悬空提交,以查看是否仍在其中隐藏了提交。
    例如,您可以运行:

    cat dangling-commits.txt |\
    # each line should look like : dangling commit <sha>,
    # you want to take the 3rd column
        awk '{ print $3 }' |\
    # for each hash : run 'git log -1'
        xargs -L1 git log -1
    

您将看到这些提交中的哪些看起来像藏匿的命令:它们的消息应该看起来像:

WIP on [branchname]: [short hash] [commit message]

您还将看到其创建的日期和时间。


如果您找到了一些希望保留的提交,请用标签或分支标记它们,以使git不会意外删除它们:

git tag [some name] [commit hash]

# e.g :
git tag backfromthedead/stash0 [commit hash]
相关问题