在我提交之前,我在一个新的 repo 中做了git rm -r -f
一个 ENTIRE 目录。我没有树枝。
我尝试了 Stack Overflow 上的答案,但没有任何帮助。我试过这个:
git reset --hard HEAD
但是得到了这个:
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
有什么办法可以找回文件吗?
其实你可以挽救文件。
原因是它git rm -r
只会删除索引中的文件,因此要删除内容,您必须已经git add
-ed 这些文件。当您这样做时,git 使用 blob-contents 的 SHA-1“真实名称”将每个文件的内容副本放入存储库。
如果你现在运行git fsck --lost-found
,git 将找到没有引用的对象(也就是说,存储库中的所有对象)并打印dangling <type> <SHA-1>
。对于每个“blob”(在这种情况下,它找到的所有内容),它将内容写入.git/lost-found/other/
SHA-1 名称下:
$ git rm -r -f .
rm 'bar'
$ git fsck --lost-found
notice: HEAD points to an unborn branch (master)
Checking object directories: 100% (256/256), done.
notice: No default references
dangling blob f53433f357a56ddb698196519f30eb390ae684cb
$ cat .git/lost-found/other/f53433f357a56ddb698196519f30eb390ae684cb
this is file bar
$
这也适用于确实有一些提交的存储库,并且是“恢复曾经有引用但不再有引用的东西”的一般方法。这将找到您git add
编辑的文件,然后替换为您在git add
编辑之前“在旧文件之上”编辑的新的、不同的内容git commit
。它还会找到任何“废弃”的提交,包括丢弃的 git stash。(提交进入.git/lost-found/commit/
。)
在上面的示例中,file方便地在其内容中bar
声明为 file 。bar
在大多数实际情况下,您必须查看每个恢复的 blob 并猜测其原始名称。
由于您在进行任何提交之前删除了数据,因此您丢失了数据。
这git reset --hard
不起作用,因为您也没有要重置的初始提交。因此,“模糊参数”错误,git 无法确定您指的是哪个提交,因为没有一个。