如何从Git悬空Blob恢复误删的未暂存文件
恢复
git clean -xdf删除的未暂存文件(基于悬空Blob) 当你通过git fsck拿到悬空Blob哈希后,按以下步骤恢复文件:
第一步:识别目标Blob
每个Blob对应一个文件内容,先通过哈希查看具体内容,确认是不是你要恢复的文件:git show <你的Blob哈希>比如你提供的哈希:
git show 3x1xd7x4090xd9x350x490d8xd76743x670xd0c5如果文件内容较长,可导出到临时文件查看:
git show <你的Blob哈希> > temp-review.txt第二步:恢复文件
确认目标Blob后,有两种恢复方式:直接导出到原路径
直接将Blob内容写入原文件路径,就能恢复到工作区:git show <你的Blob哈希> > 原文件的完整路径/文件名.后缀比如原文件是
src/utils/helper.js,就执行:git show 3x1xd7x4090xd9x350x490d8xd76743x670xd0c5 > src/utils/helper.js通过暂存区恢复(适合后续要提交的场景)
先将Blob添加到暂存区,再检出到工作区:# 100644对应普通文件权限,可执行文件用100755 git update-index --add --cacheinfo 100644 <你的Blob哈希> 原文件的完整路径/文件名.后缀 # 将暂存区的文件检出到工作区 git checkout -- 原文件的完整路径/文件名.后缀
批量定位Blob(可选)
如果悬空Blob数量多,一个个查看效率低,用以下命令批量输出所有悬空Blob的内容:git fsck --full --unreachable --no-reflog | grep blob | awk '{print $3}' | while read hash; do echo "=== Blob哈希: $hash ==="; git show $hash; echo -e "\n---分割线---\n"; done
内容的提问来源于stack exchange,提问作者Jai
相关产品推荐
相关产品推荐

