本地项目的一个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系统不会用到,给用户一个参考
config github的配置信息
description 仓库的描述信息,主要给gitweb等git托管系统使用
FETCH_HEAD 是一个版本链接,指向着目前已经从远程仓库取下来的分支的末端版本
gitk.cache -
HEAD 映射到ref引用,能够找到下一次commit的前一次哈希值
index 暂存区(stage),一个二进制文件
ORIG_HEAD HEAD指针的前一个状态
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

完成!

发布了88 篇原创文章 · 获赞 3 · 访问量 5486

猜你喜欢

转载自blog.csdn.net/youlinhuanyan/article/details/103713261
今日推荐