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 多半是历史遍历留下的正常残留,不等于仓库损坏。先看懂它们属于哪一段历史,再决定是否处理,不必急着清理。
大仓库做全量检查耗时较长,日常体检可以先用连通性检查快速判断;怀疑真的有损坏时,再跑完整检查定位具体对象。