本地项目的一个git仓库损坏如何恢复

本地项目的一个git仓库损坏如何恢复

项目运行时,内存消耗过大,连续运行了一两个星期没关机
电脑突然死机,重启动电脑后,发现该项目的git仓库不能用了,崩溃
本地的代码已提交到版本库,则未push到远程库中
git status fatal: not a git repository (or any of the parent directories): .gi

关键背景:
1、window系统,连续运行了一两个星期未关机
2、使用vscode开发node前端项目(react),当时项目正在运行中(yarn start
3、使用git 版本git version 2.24.1.windows.2
4、vscode的版本如下
在这里插入图片描述

问题现象

1、进个项目文件夹中,使用git命令时报如下错

$ git status
fatal: not a git repository (or any of the parent directories): .git

实际上,项目文件夹中,存在.git文件夹

2、git软件本身可以正常使用,其它git项目也可正常使用
3、.git文件下的所有文件都齐全

解决过程
  • step.1 把.git文件夹目录下的所有文件研究一遍,创建一个新文件夹并把远程库clone下来

发现仓库的数据应该完整的
与远程库的.git对比之后,现HEAD出现了乱码,于是猜测有可能是该HEAD文件在死机重启过程中被修改了
在这里插入图片描述

文件名说明备注
hooks存放一些sheel的地方
info存放仓库的信息
logs保存所有更新的引用记录
object存放所有git对象的地方
refs存放提交hash的地方heads:保存当前最新的一次提交的哈希值
COMMIT_EDITMSG最新提交的一次Commit Message,git系统不会用到,给用户一个参考
configgithub的配置信息
description仓库的描述信息,主要给gitweb等git托管系统使用
FETCH_HEAD是一个版本链接,指向着目前已经从远程仓库取下来的分支的末端版本
gitk.cache-
HEAD映射到ref引用,能够找到下一次commit的前一次哈希值
index暂存区(stage),一个二进制文件
ORIG_HEADHEAD指针的前一个状态
packed-refs:当更新一个引用时,git不会packed-refs,而是会在refs/heads下写入一个新文件。当查找一个引用时,git首先在refs目录下查找,如果未找到则到packed-refs文件中去查找。
  • step.2 把head文件中的指针修改为ref: refs/head/master

修改完成后,git立即可以重新使用,但是由于HEAD文件的指向是刚才修改为master的
有可能在HEAD损坏之前的分支为其它分支,这时查看一下git状态

  • step.3 查看状态git status,果然发现有许多的修改,说明当前的代码与HEAD指向有相符

因为,当前HEAD指的是master分支,之前是另一个分支,所以版本库会认为有许多代码被修改了
只需要重置一下即可

.* step.4 重置git reset --hard

完成!

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值