git pull远程分支时报fatal: bad tree object错误如何解决
Git拉取时gc自动打包报错修复方案
问题本质
报错核心原因是本地Git仓库存在损坏的tree对象(ID为ea60c4a29147cef831a8aa3f71313c64281b8078),单纯删除.git/gc.log只是清除了上次GC失败的标记文件,没有修复底层对象损坏的根因,因此每次拉取、推送等操作触发后台自动GC时,都会重复弹出警告。
具体修复步骤
- 第一步:排查损坏对象的引用情况
在仓库根目录执行命令:git rev-list --objects --all | grep ea60c4a29147cef831a8aa3f71313c64281b8078
如果输出为空,说明该损坏对象没有被任何有效分支、标签引用,可以直接清理;如果输出有对应关联引用,先执行git fetch origin拉取远程最新的完好对象,尝试覆盖本地损坏版本。 - 第二步:清除GC残留文件
执行命令删除失败日志和锁文件:rm -f .git/gc.log .git/gc.log.pid
Windows系统可以开启资源管理器的隐藏文件显示,进入项目的.git目录手动删除这两个文件即可。 - 第三步:修复仓库并手动触发GC
依次执行以下命令:- 全量扫描仓库损坏对象:
git fsck --full - 清理无引用的损坏松散对象:
git prune - 手动执行全量打包清理:
git gc --prune=now --aggressive
执行完成后没有报错的话,后续拉取代码就不会再弹出警告。
- 全量扫描仓库损坏对象:
- 备用方案:如果上述步骤执行后仍然报错,说明本地仓库损坏范围较大,先备份本地所有未提交的代码改动,删除当前损坏的本地仓库,重新从远程地址克隆一份全新的仓库,再把备份的改动迁移到新仓库即可。
注意:仅删除
.git/gc.log无法解决问题,只要底层损坏对象存在,自动GC就会持续失败,反复弹出警告。
内容的提问来源于stack exchange,提问作者Nabaraj Rai
相关产品推荐
相关产品推荐

