答案 0 :(得分:2)
上一步:首先备份存储库根目录中的.git/
文件夹。
某些操作可能会触发git的垃圾回收,这可能会删除您希望恢复的文件,制作.git/
文件夹的副本将使您可以随意重播尝试。
存储目录和reflog存储在文件.git/logs/refs/stash
中。确认此文件为空:
cat .git/logs/refs/stash
运行git fsck
,以查看是否显示有关无效对象的错误。
git fsck
将列出仍存储在git中但未被任何分支,标记或reflog引用的对象。
您正在寻找更具体的提交,运行:
git fsck | grep commit > dangling-commits.txt
检查每个悬空提交,以查看是否仍在其中隐藏了提交。
例如,您可以运行:
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]