git:Failed to resolve HEAD as a valid ref

最近遇到一个奇葩的问题,linux环境下,git add后不commit,然后把电脑挂起,出去吃个午饭,或者下班第二天来看,发现git已经无法使用了,提示为:Failed to resolve HEAD as a
valid ref

根据错误提示说是信息头无法验证,要么是git出问题,要么是版本出问题。然后尝试git branch 查看分支,发现当前本地分支不见了,于是定位到git分支文件出问题了。

目前解决方法:

1、备份

任何时候,涉及到源码的问题都要记得备份,不然一旦出问题就悲剧了。

2、进入.git文件夹,运行git的一致性检查,排查问题所在git fsck --full (加上--full选项,则会展示所有未被其他对象引用的所有对象)

这时发现有一个错误信息:object file .git/objects/c3/d3cb0ac6a96fadc346aff560690526aba8da94 is empty

3、删除这个空文件,然后再运行git fsck --full并删除所有的空文件

find . -type f -empty -delete -print

4、用git reflog恢复数据,控制台提示头信息错误

fatal: bad object HEAD
5、去看主分支上最后的提交版本
tail -n 2 .git/logs/refs/heads/master
0000000000000000000000000000000000000000 3274b39b2cadfe128f047b618c8bf5a34c463a1a wangwei
 1489029434 +0800    clone: from [email protected]:csgo2/dj-csgo.git
6、可以通过git show 3274b39b2cadfe128f047b618c8bf5a34c463a1a来查看版本信息
7、找到正确的版本后就还原该版本

git update-ref HEAD 3274b39b2cadfe128f047b618c8bf5a34c463a1a

8、版本数据还原后,还需要重构索引

rm .git/index删除当前索引文件

git reset重置索引

git fsck --full再次检查一致性

git status -s 检查当前项目文件与版本是否能够正确的对应

到此这个问题就完结了,具体为什么会出现这种情况暂时没有发现原因,解决方式也是很粗暴的重构还原。

如果你们有更好的解决方案或者知道产生原理的还请不吝赐教,非常感谢

猜你喜欢

转载自blog.csdn.net/com_ma/article/details/81071029