修复Git 的版本库object empty异常问题
2018-07-05 本文已影响6人
果汁凉茶丶
问题描述
笔者某天在提完代码时并无发现异常,但第二天要再次提交时git库报了如下错误;
error: object file .git/objects/f2/18e1c038cb0b303cf3f388d6f32f82159c25ba is empty
error: object file .git/objects/f2/18e1c038cb0b303cf3f388d6f32f82159c25ba is empty
fatal: loose object f218e1c038cb0b303cf3f388d6f32f82159c25ba (stored in .git/objects/f2/18e1c038cb0b303cf3f388d6f32f82159c25ba) is corrupt
意为库的版本管理文件中存在空文件,git错误一般都是版本冲突或版本滞后等错误,第一次遇到这种错误,具体由什么操作导致的,笔者不得而知。查了些资料做了总结,觉得有必要分享给大家供参考
修复办法
1.打开项目工程.git目录
该问题是版本库问题,那么发生问题的文件肯定是在.git
目录中找咯.
cd workspace/your-project/.git
2.删除目录下的所有空白文件
错误信息中含有空白文档,这肯定是不正确的,产生原因为上次提交代码或者其他错误操作导致最新版本生成了错误文件或空白文件。明白一个信息,我们每次提交代码,git都会将我们所提交的版本号和提交信息记录到各自相应的文档当中,以便用户检索,如版本信息路径为: ./.git/logs/HEAD
; commit
信息路径为./.git/logs/refs/heads/master
find . -type f -empty -delete -print
删除了之后,检查一下文件
git fsck
3.查看一下 HEAD 版本信息文件
git reflog
因为我的版本信息是坏的,执行命令之后看见打印如下,
fatal: bad object HEAD
4.修改指向到最新的正确的版本号上
版本文件存在错误,我们需要回退到最新的正确的版本上,因此我们需要知道最新的版本号, 这里打印出最后两条版本记录如下
tail -n 2 .git/logs/refs/heads/master
如果你已经在.git
目录上,删掉路径前的.git
即可,这里是为了写明路径。
获取最新的版本号,样子如:f6a323e2d4ccffebe45e2bdb2c66f2860df56b29
,检查一下该版本是否真是可用
git show f6a323e2d4ccffebe45e2bdb2c66f2870df56b29
如果打印类似如下信息,说明你该次提交信息是有效记录的,说明我们我们可以指向该版本号
commit f6a323e2d4ccffebe45e2bdb2c66f2870df56b29
Author: zhangfangshuai <zhangfangshuai@shouqiev.com>
Date: Tue Jul 3 22:22:54 2018 +0800
add: tranglePicker component
diff --git a/app/components/cities.js b/app/components/cities.js
index f8b904b..00d5401 100644
--- a/app/components/cities.js
+++ b/app/components/cities.js
@@ -1,8 +1,8 @@
5.更新至正确的版本号
git update-ref HEAD f6a323e2d4ccffebe45e2bdb2c66f2860df56b29
等待执行完成,再用git fsck
检查一下
6.处理冲突和提交代码
到这里,版本库已经修复完成,但是或许你还存在本地和远程库中的代码冲突,如果有,手动merge一下再提交即可。
参考资料来自 stack overflow中一文