我可以找回因运行 git restore -s@ -SW 而消失的工作树中的文件吗?

问题描述

我忘记将 .ai 添加到我的 .gitignore 文件中,但是运行了 $ git add . 并将相当多的 .ai 文件添加到索引中。

当我跑的时候 $ git status 看到它们,我想从索引中删除它们。

我匆忙跑了 $ git restore -s@ -SW 导致我所有的 .ai 文件都从我的工作树中消失了。我不应该使用 W

有什么办法可以找回我的 .ai 文件吗?

解决方法

首先,检查您是否仍然可以通过“本地历史记录”访问这些文件(由您的 IDE 记录,而不是 Git)

例如,作为 Local History VSCode extensionsuggested here 可以提供帮助。

如果没有,请仔细检查您的操作系统备份功能,例如 MacOS Time Machine status,以防您可以从备份中恢复它们。

最后,由于您已将这些文件添加到索引中,check git fsck

git fsck --cache --no-reflogs --lost-found --unreachable HEAD

从列出的 SHA1 中,您可以执行 git show

git show "<SHA-1 REFERENCE TO THE BLOB OBJECT HERE>" > lost_file.txt

torek 中的 the comments 所述:

请注意,您还可以在 .git/lost-found/other 目录中找到每个“无法访问的 blob”的内容。

这通常比 git show 更快更容易,因为您可以通过 cd .git/lost-found/othergrep expected-string * 找到具有预期字符串的文件。