执行git pull报fatal: bad object refs/heads 2/master错误求助
报错核心原因
fatal: bad object refs/heads 2/master 报错本质是本地仓库.git目录下存在非法损坏的分支引用:正常Git分支引用路径不会包含空格,路径中带空格的refs/heads 2/master是之前操作失误生成的无效引用,Git拉取远程更新时解析本地引用失败就会中断流程,全程不需要删除本地仓库重克隆,也不会丢失本地未提交变更。
操作步骤
- 第一步先做安全兜底,临时存储本地未提交的改动,避免误操作丢失:
git stash执行后所有工作区未提交的修改会被暂存到Git栈中,后续可随时恢复
- 第二步删除损坏的异常引用:
命令行在仓库根目录执行以下命令,删除带空格的非法引用文件夹(注意路径里的空格要加反斜杠转义,不要误删正常的refs/heads目录):
如果习惯可视化操作,直接打开仓库下的隐藏文件夹rm -rf .git/refs/heads\ 2/.git/refs/heads,找到名字带空格的heads 2文件夹手动删除即可。 - 第三步清理本地引用缓存、同步远程分支引用:
git gc --prune=now git remote prune origin - 第四步重新拉取远程代码:
git pull - 第五步恢复之前暂存的本地未提交改动:
git stash pop
兜底方案(上述步骤无效时使用)
如果执行完上述操作仍然报错,不需要删除本地工作文件:
- 将当前本地仓库整个文件夹(包含隐藏的
.git目录)完整复制一份做全量备份 - 在其他空白目录重新克隆一份远程仓库的全新副本
- 把新克隆副本里的
.git目录整个复制,覆盖旧本地仓库里的原有.git目录 - 回到旧仓库根目录执行
git reset --hard HEAD,此时原有工作区的所有文件都会保留,本地仓库的引用状态和全新克隆的仓库完全一致,后续拉取、提交代码就不会再触发同类报错。
内容的提问来源于stack exchange,提问作者A. Maman
相关产品推荐
相关产品推荐

