GitLab推送失败报错‘bad object refs/pipelines/***’求助排查
GitLab推送报错:fatal: bad object refs/pipelines/[流水线编号]
问题重现
作为仓库所有者,仓库仅包含单个main分支,配置了.gitlab-ci.yml启用流水线,无自定义前后置钩子,日常使用Git for Windows内置的bash或git gui进行拉取推送操作。某次推送时触发如下错误:
Pushing to git.labs.hosting.of.mycompany:myrepo.git remote: fatal: bad object refs/pipelines/2651688 fatal: bad object refs/pipelines/2651688 To git.labs.hosting.of.mycompany:myrepo.git ![remote rejected] main -> main (missing necessary objects) error: failed to push some refs to 'git.labs.hosting.of.mycompany:myrepo.git'
其中2651688是仓库近期执行成功的流水线编号。排查后确认:
- 克隆仓库到新目录直接推送,问题依旧,排除客户端本地环境问题
- 同组下其他仓库推送正常,排除集群全局异常
- 执行
git ls-remote仅能看到refs/heads/main和大量refs/keep-around/*,无法看到refs/pipelines/*(这类属于GitLab内部非公开引用)
成因分析
refs/pipelines/*是GitLab内部自动生成的引用,用于关联流水线与对应提交的状态。出现该错误的核心原因是服务端仓库的内部引用损坏:
- 流水线执行过程中,GitLab生成的临时流水线引用未被正确清理
- 仓库对象存储出现一致性问题,导致引用指向的Git对象丢失
- 仓库垃圾回收机制异常,误删了流水线引用依赖的对象
客户端可行解决办法
由于无GitLab服务端直接操作权限,可尝试以下操作:
- 手动触发仓库Housekeeping:进入GitLab仓库的「Settings」→「Repository」→「Housekeeping」页面,执行仓库维护操作。该操作会触发GitLab对仓库执行垃圾回收、引用清理、对象完整性检查,自动修复损坏的内部引用(你已通过此操作解决问题)
- 联系管理员执行仓库检查:若无Housekeeping权限,联系GitLab管理员对目标仓库执行
git fsck检查对象完整性,或运行git gc清理无效引用与对象
后续验证
执行Housekeeping后重新推送代码,确认错误消失,后续日常操作无异常即可。
内容的提问来源于stack exchange,提问作者Lei Yang
相关产品推荐
相关产品推荐

