当你在执行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!

目录
相关文章
|
6月前
|
开发工具 git
记IDEA Git版本回退并push到远程操作
记IDEA Git版本回退并push到远程操作
151 1
记IDEA Git版本回退并push到远程操作
|
6月前
|
开发工具 git
git push 提交后撤回--图文详解
git push 提交后撤回--图文详解
107 1
|
20天前
|
网络安全 开发工具 git
解决fatal:remote error:You can’t push to git://github.com/username/*.g
通过上述诊断与修复步骤,绝大多数的推送错误都能得到有效解决,确保您的Git工作流顺畅无阻。
23 1
|
2月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
144 4
|
2月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
236 3
|
6月前
|
开发工具 git
|
6月前
|
开发工具 git
Git -- 代码上传错误 error: failed to push some refs to ‘git@gitee.com:JMFive/uni-shop2.git‘
Git -- 代码上传错误 error: failed to push some refs to ‘git@gitee.com:JMFive/uni-shop2.git‘
|
3月前
|
开发工具 git 开发者
|
3月前
|
开发工具 git 开发者
Git进阶:超越pull与push,掌握这5条提效命令
【8月更文挑战第27天】在软件开发的世界里,Git作为版本控制的佼佼者,几乎成为了每位开发者的必备工具。然而,许多初学者甚至资深开发者在日常使用中,往往局限于git pull和git push这两个基础命令,忽略了Git强大的功能和灵活性。今天,我们就来探索五条能够显著提升你Git使用效率的进阶命令,让你的版本控制之路更加顺畅。
77 0
|
5月前
|
Shell 网络安全 开发工具
git实现服务器自动push拉取代码--webhooks
git实现服务器自动push拉取代码--webhooks
507 1