记一次git代码全复位后全部找回

开头三连:git操作代码要谨慎!!!!git操作代码要谨慎!!!!git操作代码要谨慎!!!!

事情起因:

新项目,从0开始搭建了一个新框架的后端服务,因代码库审批慢,程序代码基本已经完工了代码库才创建好,本着保险的原则,昨天晚上准备把代码提交入库。

事情经过:

待提交代码最开始是在master分支的。我先在本地创建分支A(远程也同步创建),然后切换到A分支,然后提交,然后推送。因为单位内网提交规则的限制,推送失败了,想着那就重新提一次吧。本来想复位到master那一行的A分支(同分支复位,代码会回到待提交区),鬼使神差的复位到master了,过程不太清楚了,大概就是这个流程,然后复位完成后,发现提交区怎么是空白的,切换到idea里面看,src目录下全空了,这时,我就懵了就懵了懵了了......

事情结果:

①这种情况下从git分支已经没法复位恢复了,冷静了一下,翻了翻代码库的目录,发现编译产物还在,就赶紧打包放到别的目录做个备份。

②因为很慌,就想着赶紧恢复出来定定神,就用java-dcompiler先做了反编译,源码也算是恢复出来了,但这个办法会丢失所有注释,且代码虽然能运行但已经不是自己写的那种风格了

最终解决:

一:根据百度,用git reset --hard、git fsck --lost-found命令,后发现lost-found目录中没有生成对象文件,所以这个方法无效。

二:最后找到这个博主分享的办法:火星车十号,在.git/objects目录里看到了不少文件,死马当活马医了,命令:git cat-file -p 文件夹名文件名,找一个文件试了一下,恢复出来了我的代码!然后就兴奋了,直接做好各种备份后开干。

三:我用java去遍历objects下所有的文件,并把catfile命令和cd 目录命令组合生成了一个shell文件,在gitbash终端中执行这个脚本,然后如愿以偿得到了所有对象解析出来的txt文件。

四:接下来,还是用java,遍历所有txt文件,根据文件内容是否包含“package”“public class ”关键字,(根据实际文件做修改,比如enums、interface、mapper文件等)然后按照package的目录树以及类名,把txt文件按照目录层级转存并重新命名。最后再做系统检查、工程运行。

五:幸运的是,我记得我最后更改的代码,检查了也是最新的,目前代码算是救回来了

后记:

  1. 因为是新库,没有任何推送记录,所以没法通过回滚到某一个提交版本号

  1. 因为是单位的办公电脑,没法做截图,代码也没法分享出来,只说明方法

  1. objects目录下保存了对象,我猜测是做过一次commit,如果连commit都没有,那估计肯定是找不回来了~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值