git prune 是什么
删除没有任何引用可达的对象(悬空对象):先 git fsck --unreachable 看清单、git prune -n 演练范围,再真正执行。日常多由 git gc 顺带完成,单独使用多见于磁盘紧张或清理特定残留的场景。
基本信息
| 用途 | 删除不可达对象,回收磁盘空间 |
|---|---|
| 演练 | git prune -n(只列出将被删除的对象) |
| 保留期 | 默认只清理超过约两周的对象,由 gc.pruneExpire 控制 |
| 排查 | git fsck --unreachable 先列出候选对象 |
| 顺序建议 | reflog 仍持有的对象要先处理 reflog 才会被回收 |
典型使用场景
- 磁盘紧张:仓库对象占用异常时回收悬空对象释放空间。
- 清理残留:rebase 或 amend 之后的对象在保留期后被回收。
- 隐患排查:先用 fsck 看悬空与损坏对象清单,再决定动作。
- 维护流程:服务器端定期维护的一部分,通常由 gc 顺带触发。
- 恢复窗口评估:确认误删保护期需求后再调整保留时间。
- 批量维护窗口:把 fsck 演练与正式清理分两次执行,中间留出复核时间。
常用示例
常用示例
git fsck --unreachable # 列出不可达对象(悬空提交/树/内容对象)
git prune -n # 演练:只显示将被删除的对象
git prune # 实际删除(默认只动超过保留期的对象)
git prune --expire=now # 立即回收受保护对象(谨慎使用)
git config gc.pruneExpire # 查看当前保留期设置命令与风险对照
| 命令 | 作用 | 风险 |
|---|---|---|
| git fsck --unreachable | 列出不可达对象 | 只读,安全 |
| git prune -n | 演练将删除的清单 | 安全,仅显示不删除 |
| git prune | 实际回收过期对象 | 默认保留期内的不动 |
| git prune --expire=now | 立即回收受保护对象 | 失去恢复窗口,慎用 |
正常由 gc 代管 prune;单独执行多见于磁盘紧张时,务必先加 -n 演练。reflog 里仍能找回的对象在保留期内不会被删,调整保留期前想清楚误操作恢复窗口的需求,清理后可用 fsck 复查连通性。