如何解决Git fatal:bad object报错 同步本地master与远程仓库
根因说明
报错里的 2后缀不属于合法分支名,是本地.git/refs/heads目录下残留的异常命名损坏引用文件导致的。Git遍历本地分支引用时读到这个非法文件就会直接抛出致命错误,中断所有引用解析、拉取流程。你之前执行git reset --hard origin/master拿到的是本地缓存的旧远程提交记录,根本没拉到最新的远程master状态,才会出现重置后版本落后的问题。
操作步骤
- 第一步:删除损坏的异常引用文件
你本地正常的1477/feature-client-custom-query分支对应引用文件是不带后缀的,带2后缀的是异常操作(比如分支创建中断、文件系统误操作)生成的垃圾文件,直接删除无数据风险(该分支所有提交已推送到远程,哪怕误删正常分支引用也能重新拉取恢复)。
在仓库根目录执行命令直接删除该异常文件:rm -f ".git/refs/heads/1477/feature-client-custom-query 2" - 第二步:重新拉取全量远程引用
执行命令清理失效引用缓存,拉取远程最新的所有分支记录:
如果执行过程中再弹出其他git fetch origin --prunebad object xxx类报错,按照第一步的逻辑,找到报错路径下带异常后缀的引用文件删除后重跑该命令即可。 - 第三步:对齐本地master分支到远程最新版本
切到master分支后执行硬重置,直接对齐远程最新提交:git checkout master git reset --hard origin/master
校验
操作完成后执行git log -1,输出的最新提交哈希和远程仓库master分支最新提交哈希完全一致,即同步完成。后续执行git pull、git gc都不会再触发之前的致命错误。
提示:硬重置会清空本地master分支上未提交的工作区改动,有需要留存的内容提前备份即可。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

