突然断电导致git分支错误解决办法
2017-08-04 本文已影响102人
RGW
啥情况
Local Branches 里面也找不到当前分支, 所有文件变成了untracked. 分支显示unknown branch/commit .
![](https://img.haomeiwen.com/i99822/f57e7c665fe51d4f.png)
![](https://img.haomeiwen.com/i99822/fe1171aef4adb938.png)
发生之前
程序正在编译, 趁着编译的时间修改了一下程序, 按保存的时候发生蓝屏, 自动重启后就是这个样子了. 原因不明.
解决办法
查看源文件是好的, 编译能够正常通过. 只是蓝屏前按保存的那一些修改没有了. 程序在就好, 备份好源文件随便折腾一下看看能不能修好, 毕竟本地分支有很多commit还没有push.
进入git bash,
git status
查看当前仓库状态
![](https://img.haomeiwen.com/i99822/f7f14f9d890183d7.png)
发现分支名称正常显示(有救?), 但是所有文件变成了untracked.
查看一下log是否正常
![](https://img.haomeiwen.com/i99822/aaef0d604267f069.png)
显示当前分支损坏了.
查看一下.git文件夹下文件是否正常
![](https://img.haomeiwen.com/i99822/a7db8f60e91b007a.png)
![](https://img.haomeiwen.com/i99822/815f3b6cf2c56443.png)
损坏前提交的log还在, hash也能查到, 靠谱, 估计能修好
查看一下当前HEAD指向位置
![](https://img.haomeiwen.com/i99822/1a5dddddb340795e.png)
![](https://img.haomeiwen.com/i99822/3a255d0ca9fa15b4.png)
显示指向seg, 目前看来一切正常, 找到seg, 看看seg里面是否指向当前commit的hash
![](https://img.haomeiwen.com/i99822/408d2441de80ea9a.png)
![](https://img.haomeiwen.com/i99822/f7266ed04e32261a.png)
这是什么鬼, 查看一下其他分支显示的内容是正常的
![](https://img.haomeiwen.com/i99822/e254e9b930561c09.png)
![](https://img.haomeiwen.com/i99822/b7fdd0fcbdd2e39f.png)
看来是找到病根了, 动个手术吧, 把log中的hash粘贴过来试试.
把标注的hash复制到seg中
![](https://img.haomeiwen.com/i99822/83f5da40b98dab4d.png)
哎? 你的小尾巴是怎么回事?!
![](https://img.haomeiwen.com/i99822/9481af98e5f266a9.png)
再动个小手术, 切掉小尾巴(使用
dos2unix
命令)
![](https://img.haomeiwen.com/i99822/a0128102adff5b1c.png)
好了, 站起来走两步.
我的天, 还没站起来就晕过去了
![](https://img.haomeiwen.com/i99822/7fa7d7dc8440cde0.png)
按照提示路径查看一下文件, 发现文件已经损坏, 截肢吧!
![](https://img.haomeiwen.com/i99822/310093a661dd947a.png)
将seg的内容修改为上一次提交的hash值
![](https://img.haomeiwen.com/i99822/beeed56a1ccdb130.png)
再站起来看看.
![](https://img.haomeiwen.com/i99822/59e440d033dfdf07.png)
多走两步
![](https://img.haomeiwen.com/i99822/4fb808afdf075ce1.png)
![](https://img.haomeiwen.com/i99822/78d0bdffdd7c329d.png)
看来恢复的不错, 之前修改也都存在, 那么就在此提交就好了.
噗, 一口血吐了出来.
![](https://img.haomeiwen.com/i99822/e24e45b78c6d8b30.png)
![](https://img.haomeiwen.com/i99822/810c371dc1ae7136.png)
找到4cd5b3d23b34c6d9deee5c99a0ea419778c685文件, 发现内容全是0000. 删掉.
在次执行
git fsck --full
将出现问题的删除, 直到如下输出
![](https://img.haomeiwen.com/i99822/5ce74c10c2c5d2f3.png)
再次提交, 提交成功!
执行git fsck --full
![](https://img.haomeiwen.com/i99822/34c60a4994d4e323.png)
根据提示删除之前发生错误的那次提交的log
进入
.git\logs
, 打开HEAD, 删除错误的提交log..git\logs\refs\heads
下的提交log同理也要删除, (上图没有提示是因为我已经删除了)
![](https://img.haomeiwen.com/i99822/3a2d26598ccb1ee6.png)
再次执行
git fsck --full
![](https://img.haomeiwen.com/i99822/697f8d75e615bcda.png)
都正常了, 出院.
ps: 以后还是经常push吧, 这样就可以直接使用"复活币"了.