当你在执行git push的时候断电。。

push断电

一顿操作猛如虎,git push断电了。。

据佛经具体记载,一弹指为二十瞬,一瞬为二十念,一念为二十息,一息为六十刹那,一刹那为九百生灭。

在来电之前的这一段时间,脑补了计算机在断电的一刹那可能的一些操作,主要有以下几点:

  • 保护现场;
  • 网络断开,无法上传;
  • 磁盘读取失败,无法上传;
  • 上传了一部分,失败了,这是最讨厌的。。

实际上是怎样的呢?

来电后,到远程仓库一看,发现竟然push成功啦~~
也就是说在停电时的那个push操作已经成功完成,远程仓库已更新,然而,本地仓库却坏了。。

本地仓库broken

使用git log查看记录,发现报错:

$ git log
fatal: your current branch appears to be broken

而且所有的文件状态都变成了新创建,显示未加入版本控制。。

解决方法

  1. 查看当前HEAD记录

2020-07-02-Git-00.png

里面全是0,正常情况下应该是一个commit hash

  1. 查看HEAD日志
    .git\logs\refs\heads目录下查看对应分支的日志文件

2020-07-02-Git-head.png

最下方为最新的commit记录。

  1. 恢复当前HEAD记录

复制HEAD日志的最新commit hash到当前HEAD记录文件,即从.git\logs\refs\heads对应的分支文件中复制最新commit hash.git\refs\heads\对应的分支文件中

Note: 这里是使用95e6e609580daa06748c660e68053108198fc3c1覆盖那一堆0。

保存之后,可以发现git的本地仓库随即恢复正常。

如何复现

要复现这个问题,小哥完全不必要真的在git push时去断开电源;
注意下之前的恢复操作,可以发现,直接把.git\refs\heads\下对应分支文件内容改了或者置空,就能够看到所有的文件都成了new的,表示需要加入版本控制。。
不信你试试😎

Reference

https://stackoverflow.com/questions/33012869/broken-branch-in-git-fatal-your-current-branch-appears-to-be-broken


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heartsuit

别说什么鼓励,这就是互联网乞讨

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值