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 git@172.16.20.174: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 检查当前项目文件与版本是否能够正确的对应


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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值