如何从丢失的树和悬空blob中恢复文件?

时间:2017-12-11 07:19:59

标签: git

git add .我运行git rm -r -f .后,我的所有本地文件都被意外删除了。 使用git fsck --lost-found恢复后,我在lost-found/other目录中有this

git fsck --full notice: HEAD points to an unborn branch (master) Checking object directories: 100% (256/256), done. notice: No default references dangling blob 0453ac74117a3e02ae1169ac28e6df356baec5b6 dangling blob 871364bedccaa2c57054509feeb60955e70bd141 dangling blob c38f2c2aead5f278b7680a0629ee56682264f9d3 dangling blob c2ad8101cfcf3d21e33c8da3f0677b5b9cc58c30 dangling blob c5d98571c464030b61978b6812fa3579c7294b99 missing tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904

在看了一些悬垂的斑点后,我意识到虽然他们有删除文件的内容,但也有一些乱码:

slug_fieldtidtMetacBseZeZdZRS(tcreatedtownertimage(screatedsownersimage(R(R)Rtmodeltfields(((sE/home/invinciblycool/PycharmProjects/jotter_api/jotter/serializers.pyR1HsN(( R(R)R tNonetTrueR4RtSlugRelatedFieldR3R1(((sE/home/invinciblycool/PycharmProjects/jotter_api/jotter/serializers.pyR+?s tNoteSerializercBs3eZejdedd�Zddd��YZRS(R.R/R0R1cBseZeZdZRS(R3R2ttext(sownerscreatedstext(R(R)RR5R6(((sE/home/invinciblycool/PycharmProjects/jotter_api/jotter/serializers.pyR1Ss((R(R)RR9R8R3R1(((sE/home/invinciblycool/PycharmProjects/jotter_api/jotter/serializers.pyR:M (RRtrest_frameworkRtmodelsRRR t ImageFieldR

如何恢复这些文件,实际上是从胡言乱语中我甚至不确定这些文件是否存在。 仅供参考,Javascript文件看起来很干净,但不是其他python和html文件。

2 个答案:

答案 0 :(得分:2)

我试图重现你所做的事情:

1)git add .

2)rm -r -f *

在此之后我认为你创建了一个git resetgit reset --hard(错误的选择:它用空的覆盖了索引,因为你从未做过提交)...

但正确的命令如我之前的回答git checkout-index -af中所示(但重置后这没用)

此时你正确地给出了git fsck --lost-found,我的建议等同于较低级别的命令(git cat-file...

所以:为什么乱搞?

你确定在目录中只有源代码文件而不是(例如)python文件的编译版本(扩展名.pyc)吗?也许在IDE创建的一些隐藏目录中?

答案 1 :(得分:0)

1)rm -r -f .应该在没有效果的情况下中止,可能是rm -r -f *并且它没有删除.git目录

2)命令git fsck --lost-found没有中止

这一事实证实了这一点

在这种情况下(仅删除工作目录)正确的命令,以尽可能恢复

git checkout-index -af:这会将当前索引上的版本(您刚放入git add .的版本)复制到工作目录