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

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

J9P~NZ3)[T1TBBU51_Y{)KE.png

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情


push断电


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

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

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

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

实际上是怎样的呢?

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


本地仓库broken


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


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

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


解决方法


  1. 查看当前HEAD记录


JS_U4B~D(T75JY6F3U)C1QV.png


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

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


]9L9NX[RJ%~U~Q{~P~[O5DF.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

stackoverflow.com/questions/3…


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

Your comments and suggestions are welcome!

目录
相关文章
|
8天前
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
29 16
|
9天前
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
37 18
|
3月前
|
网络安全 开发工具 git
解决fatal:remote error:You can’t push to git://github.com/username/*.g
通过上述诊断与修复步骤,绝大多数的推送错误都能得到有效解决,确保您的Git工作流顺畅无阻。
297 1
|
5月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
218 4
|
5月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
315 3
|
6月前
|
开发工具 git 开发者
|
8月前
|
Shell 网络安全 开发工具
git实现服务器自动push拉取代码--webhooks
git实现服务器自动push拉取代码--webhooks
646 1
|
8月前
|
网络安全 开发工具 数据安全/隐私保护
git pull/push每次都需要输入密码问题
git pull/push每次都需要输入密码问题
492 0
|
8月前
|
Linux 开发工具 git
解决 Linux git push 贡献者不同(没有出现绿点)的问题
解决 Linux git push 贡献者不同(没有出现绿点)的问题
|
8月前
|
开发工具 git
【已解决】error: failed to push some refs to ‘git@github.com:BATdalao/Github-green.git‘
【已解决】error: failed to push some refs to ‘git@github.com:BATdalao/Github-green.git‘