第一种方法:
- 执行
git fsck --lost-found
- 进入.git文件夹中,保险起见,拷贝lost-found/other 文件夹到其他任意位置;
- 查看拷贝文件夹中的文件内容,将其重命名为之前名称(文件名字无法找回,只能手动重命名,图片等文件直接重命名即可),放回之前路径下。
第二种方法:
find .git/objects -type f | xargs ls -lt | sed 30q
提取 object/
后面的值,第一个/
要去掉。例如第一个是 79dcf6cb091817f990c75cadd1a2de8816f19613
然后一次次的执行 git show 79dcf6cb091817f990c75cadd1a2de8816f19613 > 2.png
,查看文件内容是否是丢失的。
这种方式效率太低。
三、 find .git/objects -type f | xargs ls -lt | sed 30q > file.txt
然后多光标操作,每一行只留下id。
然后创建脚本,并执行:
注:需要先创建空文件夹files,否则会报找不到files文件夹导致写入失败
#!/bin/bash
for line in `cat file.txt`
do
echo "File:${line}"
git show ${line} > files/${line}.txt
done
执行:
sh build.sh
最后,手动还原,点进去每一个文件,有些可能是一些空文件,有一些正好是你丢失的文件,需要自己手动加回到正确的位置。