Git推送报错:缺失必要对象,附git fsck检测结果求解决
问题详情
推送命令及错误输出
执行命令:git push origin test
原始错误输出:
Enumerating objects: 30, done. Counting objects: 100% (23/23), done. Delta compression using up to 10 threads Compressing objects: 100% (12/12), done. Writing objects: 100% (12/12), 1.01 KiB | 1.01 MiB/s, done. Total 12 (delta 9), reused 2 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (9/9), completed with 8 local objects. remote: fatal: bad object refs/__gh__/pull/55783/rebase To git.corp.test.com:Test/t.git ! [remote rejected] test -> test (missing necessary objects) error: failed to push some refs to 'git.corp.test.com:Test/t.git'
中文翻译:
枚举对象:30个,已完成。
统计对象:100%(23/23),已完成。
使用最多10线程进行增量压缩
压缩对象:100%(12/12),已完成。
写入对象:100%(12/12),1.01 KiB | 1.01 MiB/s,已完成。
总计12个对象(增量9个),复用2个对象(增量0个),未复用打包对象0个
远程端:解析增量:100%(9/9),完成时使用8个本地对象。
远程端:致命错误:无效对象 refs/gh/pull/55783/rebase
推送至 git.corp.test.com:Test/t.git
! [远程拒绝] test -> test (缺少必要对象)
错误:部分引用推送至 'git.corp.test.com:Test/t.git' 失败
git fsck --full检测结果
执行命令:git fsck --full
原始输出:
@Brian61354270 Checking object directories: 100% (256/256), done. Checking objects: 100% (2233797/2233797), done. error: refs/remotes/origin/HEAD: invalid sha1 pointer 0000000000000000000000000000000000000000 Checking connectivity: 2233798, done. dangling commit 0f22008e44c7ab5f73699a9b551241dcd00d73d4 dangling commit 642a800151da6bc94d343b57024a426063510051 dangling commit 2536007f58b1bf0ac6ac380dca963b83b2380c4d dangling commit 0041802fada7edd6a7ce9de72486751742e441d9 dangling commit cd5680d2187338d495eb86bcccbde156c9d10ad6 dangling commit ca618036e28c9c56ef3abd70a9f259383f905311
中文翻译:
@Brian61354270
检查对象目录:100%(256/256),已完成。
检查对象:100%(2233797/2233797),已完成。
错误:refs/remotes/origin/HEAD: 无效的SHA-1指针 0000000000000000000000000000000000000000
检查连通性:2233798个对象,已完成。
悬空提交 0f22008e44c7ab5f73699a9b551241dcd00d73d4
悬空提交 642a800151da6bc94d343b57024a426063510051
悬空提交 2536007f58b1bf0ac6ac380dca963b83b2380c4d
悬空提交 0041802fada7edd6a7ce9de72486751742e441d9
悬空提交 cd5680d2187338d495eb86bcccbde156c9d10ad6
悬空提交 ca618036e28c9c56ef3abd70a9f259383f905311
解决步骤
1. 清理远程仓库无效引用
错误根源是远程仓库存在无效的引用refs/__gh__/pull/55783/rebase。如果拥有远程服务器权限,登录后进入仓库所在目录执行:
git update-ref -d refs/__gh__/pull/55783/rebase
若无权限,直接联系仓库管理员处理该无效引用。
2. 修复本地origin/HEAD指针
本地检测到refs/remotes/origin/HEAD指向无效的全零SHA-1,执行以下命令将其重置为远程仓库的默认分支:
git remote set-head origin -a
3. 重新尝试推送
完成上述修复后,再次执行推送命令:
git push origin test
4. 关于悬空提交的说明
检测到的悬空提交是未被任何分支、标签或其他引用关联的历史提交,不会影响本次推送操作。如果需要清理这些无用提交,可执行git prune,但建议先确认这些提交是否还有留存价值。
内容的提问来源于stack exchange,提问作者Rue Vitale

