首页/开发/Git 与协作速查/git fsck 仓库一致性检查
Git 基础与命令88 条

git fsck 仓库一致性检查

扫描对象库与引用:报告缺失对象、悬空对象与结构问题,是仓库体检与故障排查的入口命令。

Git 与协作速查开发更新于 2026-10-13

fsck 是什么

git fsck 检查仓库自身的完整性:对象库中的对象能否正确解析、引用是否指向存在的对象、是否存在悬空对象与结构异常。它只读、不修改数据,是仓库体检与故障排查的入口命令。异常关机、磁盘告警、仓库搬迁或拷贝之后跑一次,能尽早发现问题。

基本信息

用途完整性检查与悬空对象发现
快速模式--connectivity-only 只做连通性检查
悬空对象--unreachable 只列出不可达对象
恢复线索--lost-found 把悬空对象信息写入 .git/lost-found
数据影响只读检查,不修改仓库内容

典型使用场景

  • 异常关机或断电后确认对象库没有被损坏
  • 仓库迁移、拷贝或磁盘扩容后做一次体检
  • 执行垃圾回收之前排查是否存在异常对象
  • 误删分支后寻找可能仍然存在的悬空提交
  • 出现对象无法读取类报错时定位问题范围

常用示例

常用示例
git fsck                        # 全量检查对象库与引用
git fsck --connectivity-only    # 只做连通性检查,速度更快
git fsck --unreachable          # 列出不可达对象
git fsck --lost-found           # 把悬空对象信息写入 .git/lost-found
git fsck --dangling            # 只关注悬空对象相关输出

输出含义

输出含义处理建议
dangling commit不可达的提交对象多为误删分支或历史重写的残留
dangling blob / tree不可达的文件与目录对象通常无害,等回收即可
missing被引用的对象不存在属于真实损坏,从其他副本恢复
corrupt / error对象结构损坏从远端或其他克隆重新获取
输出里成片的 dangling commit 多半是历史遍历留下的正常残留,不等于仓库损坏。先看懂它们属于哪一段历史,再决定是否处理,不必急着清理。
大仓库做全量检查耗时较长,日常体检可以先用连通性检查快速判断;怀疑真的有损坏时,再跑完整检查定位具体对象。

易错点

  • 把成片的悬空对象输出当成损坏,反复执行清理动作,实际它们通常无害
  • 大仓库直接跑全量检查耗时很长,应先做连通性检查缩小范围
  • 发现真实损坏后继续在同一副本上操作,可能把问题扩散到备份,应先停止写入再恢复
  • 只在一台机器上保留唯一副本,一旦对象损坏没有任何可比对的来源
  • 在没有备份的情况下根据检查结果直接做清理,可能把可恢复的悬空提交永久删除

数据来源与参考

  • Git 官方文档:git-fsck
  • Pro Git 2nd Edition · 10.4 维护与数据恢复
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌