执行git reset --hard丢失文件,如何从哈希格式恢复?
恢复Git悬空树中的丢失文件
方法一:直接检出为新分支(最简便)
如果想一次性恢复所有文件到工作区,直接基于悬空树创建新分支即可:
git checkout -b recovered-branch d2682fde785bcfd92525e5b856770c084fd32ee8
执行后,Git会自动将该悬空树对应的所有文件检出到当前工作目录,你可以直接使用这些文件,之后也可以把这个分支的内容合并到主分支。
方法二:手动导出单个文件(适合选择性恢复)
如果你只需要恢复部分文件,或者想单独导出文件到指定目录:
- 先确认悬空树的完整文件列表:
git cat-file -p d2682fde785bcfd92525e5b856770c084fd32ee8
输出会类似:
100644 blob a1b2c3d4e5f6... example.txt 100644 blob f7e6d5c4b3a2... docs/manual.md
- 对每个需要恢复的文件,用以下命令导出:
git cat-file -p <文件哈希值> > <文件名>
比如恢复example.txt:
git cat-file -p a1b2c3d4e5f6... > example.txt
方法三:批量导出所有文件
如果文件数量多,用脚本批量处理更高效:
在bash终端中执行以下命令(确保当前在Git仓库目录下):
# 可选:创建临时目录存放恢复的文件 mkdir git-recovery && cd git-recovery # 批量导出所有blob类型的文件,自动保留原目录结构 git cat-file -p d2682fde785bcfd92525e5b856770c084fd32ee8 | while read mode type hash name; do if [ "$type" = "blob" ]; then mkdir -p "$(dirname "$name")" git cat-file -p "$hash" > "$name" fi done
内容的提问来源于stack exchange,提问作者Ankush_anonymous
相关产品推荐
相关产品推荐

