【解决方案】git错误:对象文件为空 error: object file
问题
提前关闭虚拟机,使得git push中断,导致本地与云端版本不一致,出现对象文件为空的错误。现象如下:
(base) root@yyy-VMware-Virtual-Platform:~/test# git status
error: 对象文件 .git/objects/e0/1e63bbb4eae481da19737d3d1c166484a586d0 为空
error: 对象文件 .git/objects/e0/1e63bbb4eae481da19737d3d1c166484a586d0 为空
fatal: bad object HEAD
解决方案
- 使用git fsck --full查看有哪些空文件:
(base) root@yyy-VMware-Virtual-Platform:~/test# git fsck --full
error: 对象文件 .git/objects/06/df9fcbe1977eef884d21b2e22237ee494c32a5 为空
error: 不能 mmap .git/objects/06/df9fcbe1977eef884d21b2e22237ee494c32a5: 没有那个文件或目录
error: 06df9fcbe1977eef884d21b2e22237ee494c32a5:对象损坏或丢失:.git/objects/06/df9fcbe1977eef884d21b2e22237ee494c32a5
error: 对象文件 .git/objects/34/8161c71c36b4f84d7b6de4e65f8d7b5348ea40 为空
error: 不能 mmap .git/objects/34/8161c71c36b4f84d7b6de4e65f8d7b5348ea40: 没有那个文件或目录
error: 348161c71c36b4f84d7b6de4e65f8d7b5348ea40:对象损坏或丢失:.git/objects/34/8161c71c36b4f84d7b6de4e65f8d7b5348ea40
error: 对象文件 .git/objects/3d/97cab99f6f87d36857b0568c9d09b2f04143d2 为空
......
- rm删除空文件并再次git fsck --full,检查是否还有空文件。
rm .git/objects/44/92a05fc0954268d3c9fa4e21526e7d30fbdfc0
- 或可以cd到.git目录下运行find . -type f -empty -delete -print自动删除全部空文件
cd .git
find . -type f -empty -delete -print
- 最终确认git fsck --full
(base) root@yyy-VMware-Virtual-Platform:~/test# git fsck --full
正在检查对象目录: 100% (256/256), 完成.
error: refs/heads/main:无效的 sha1 指针 e01e63bbb4eae481da19737d3d1c166484a586d0
error: refs/remotes/origin/main:无效的 sha1 指针 e01e63bbb4eae481da19737d3d1c166484a586d0
error: HEAD:无效的 sha1 指针 e01e63bbb4eae481da19737d3d1c166484a586d0
error: HEAD:无效的引用日志条目 e01e63bbb4eae481da19737d3d1c166484a586d0
error: refs/heads/main:无效的引用日志条目 e01e63bbb4eae481da19737d3d1c166484a586d0
error: refs/remotes/origin/main:无效的引用日志条目 e01e63bbb4eae481da19737d3d1c166484a586d0
注意:无默认引用
error: 4492a05fc0954268d3c9fa4e21526e7d30fbdfc0: invalid sha1 pointer in cache-tree of .git/index
error: f5b273722fe29f4bd940c7c93aa9bec0823f7347: invalid sha1 pointer in cache-tree of .git/index
error: 772bd6dd528cbd80e0a2c3919394722f5148142b: invalid sha1 pointer in cache-tree of .git/index
悬空 blob 52118c85df4b575d091e3b3dd6338941686b4fb9
悬空 blob 9de56cc91fe3054ad5189b2264b708c794059411
悬空 blob ccd524e0f558b2d9da48c07a249ffc42926211b3
悬空 blob 37060e8fae0c48651ca1e90123b68fd24416cc31
- 运行git pull,拉取云端配置
注意:此操作只会填补悬空的文件,不会覆盖本地文件。如果不放心可以本地先备份。
(base) root@yyy-VMware-Virtual-Platform:~/test# git pull
remote: Enumerating objects: 309, done.
remote: Counting objects: 100% (309/309), done.
remote: Compressing objects: 100% (256/256), done.
remote: Total 309 (delta 68), reused 289 (delta 48), pack-reused 0 (from 0)
接收对象中: 100% (309/309), 3.33 MiB | 2.53 MiB/s, 完成.
处理 delta 中: 100% (68/68), 完成.
已经是最新的。
- 完成本地的.git文件恢复