你对git fsck 做了什么尝试?
看到这个问题:Recover files that were added to the index but then removed by a git reset
一般的答案是:您键入的指令序列已将文件从跟踪(和磁盘)中删除,不能保证可以检索文件的内容。
然而,git 有很多安全机制,其中之一是:如果在 repo 的某个地方输入了一些数据,则两周前不会删除。
(git有垃圾回收机制,见git help gc)
如果你确实在某个时候运行了git add test.txt,并且这个动作是最近的,那么应该仍然有一些存储在 git 中的文件内容的痕迹:
git fsck --full --unreachable --no-reflog
在git 的说法中,文件是blob:
git fsck --full --unreachable --no-reflog | grep blob
这应该会给你一个内部 git 哈希列表:
unreachable blob 08bf360988858a012dab3af4e0b0ea5f370a2ae8
unreachable blob 21bf7ea93f9f9cc2b3ecbed0e5ed4fa45c75eb89
unreachable blob 08c12ef37075732cf4645269ab5687ba6ba68943
...
注意git add file.txt 存储文件的内容,而不是文件的名称 ...
如果您记得文件中的特定字符串,可以尝试使用 git grep <string> <hash> 缩小研究范围:
$ git fsck --full --unreachable --no-reflog | grep blob | awk '{ print $3 }' > list.txt
$ cat list.txt | while read blob; do
if git grep -q "string" $blob; then
echo $blob
fi
done
然后您可以使用以下命令查看 blob 的全部内容:
git show $blob
并希望找回您正在寻找的文件。