记一次死机导致的 Git 错误
/ 3 min read
📑 目录
记一次死机导致的 Git 错误
概述
事情是这样的, 那天快下班的时候, 准备提交下代码, 一共3个项目(A,B,C), 前两个项目都提交好了, 在提交第三个项目时, 不料隐疾发作, 一脚麒麟腿如雷鸣般轰出, 幸好四周空旷无边, 金精打造的地面也是坚固无比, 但由于内力太过雄厚, 这脚的劲风擦到了旁边的主机. 静止的屏幕和不再闪烁的鼠标, 仿佛在预示着一些不好的事情…
第二天
环境 win7, 版本git version 2.15.1.windows.2
错误
项目A:
git log=>fatal: your current branch appears to be broken,git status正常项目B 和项目A 同样的错误
项目C:
git status=>error: bad signature fatal: index file corrupt,git log正常
fatal: your current branch appears to be broken
解决方案: 修复 .git/refs/heads/分支名 , 例如: .git/refs/heads/master
如何修复
- 查找
.git/logs/refs/heads/分支名, 打开这个文件 - 找到最后一次 commit 的
commit-id- 示例: 文件中最后一行如下, 第二个
commit-id就是最近一次的commit-id 0b85220ef7d457319178dc960e04b209d7e5fba8 8dab031b8f57285fc403bb55eeced70b1176883f giraffetree <giraffetree1@gmail.com> 1561696990 +0800 commit: add: lala- 这里的
commit-id就是8dab031b8f57285fc403bb55eeced70b1176883f
- 示例: 文件中最后一行如下, 第二个
- 用文本打开
./git/refs/heads/分支名, 将commit-id覆盖写入该文件 - 再次运行
git log, ok 正常了
如何重现 your current branch appears to be broken
// 初始环境// 提交了2次git initecho "hello" > hello.txtgit add .git commit -m "init"echo "lala" >> hello.txtgit add .git commit -m "add: lala"现在我们修改下 ./git/refs/heads/master 文件
$ cat ./.git/refs/heads/master8dab031b8f57285fc403bb55eeced70b1176883f$ echo "haha you are broken" > ./.git/refs/heads/master$ git logfatal: your current branch appears to be broken重复下 如何修复 中的步骤
## 下面这个脚本的含义就是 找到最后一行中的第二个 commit-id 然后写入 ./.git/refs/heads/master中$ tail -n 1 ./.git/logs/refs/heads/master | awk '{print $2}' > ./.git/refs/heads/master$ git logcommit 8dab031b8f57285fc403bb55eeced70b1176883f (HEAD -> master)Author: giraffetree <giraffetree1@gmail.com>Date: Fri Jun 28 12:43:10 2019 +0800
add: lala
commit 0b85220ef7d457319178dc960e04b209d7e5fba8Author: giraffetree <giraffetree1@gmail.com>Date: Fri Jun 28 12:37:43 2019 +0800
init## 正常咯~error: bad signature fatal: index file corrupt
如何修复
- 删除
.git/index文件 git reset这个命令在执行过程中, 会重建 index 文件, 就正常啦
如何重现 bad signature fatal: index file corrupt
## 输入 460 个第0位字符到 index 文件中$ printf '%.s\x00' {1..460} > ./.git/index$ git statuserror: bad signaturefatal: index file corrupt