概要
在执行git操作的过程中电脑突然重启导致.git目录下文件损坏导致git所有命令不可用,本文简单记录恢复过程。
解决过程
路径一:
通过搜索引擎、chatgpt等途径检索错误信息,几乎无一例外都给出git init的解决办法,尝试后错误仍然存在。后来经过思考git init用来新建工程缺少.git文件的,当前的出错的是已有工程,所以该解决方案不适用本次问题。
路径二:
印象中git和svn的区别,Git是分布式的而SVN是集中式的,基于Git的特性数据存放在本地,遂萌生尝试通过本地.git文件找回本地分支修改未同步远程仓库的代码。
.git文件夹列表如下图所示,由于对git各个目录及存放的数据不了解,根据本地最后一次修改程序的时间和文件的更新时间来判断哪些文件分支修改相关。经过对比分析发现HEAD文件、refs目录、logs目录和本次问题密切相关。
- .git\logs\HEAD存放仓库所有的操作记录,包括创建分支、commit提交、分支合并变更的commit和message
- .git\logs\refs 存放对应分支的提交变化历史信息
- .git\refs 存放branch分支最后一次提交的commit值,例如.git\refs\heads\master文件存放master分支最新的commit id
- .git\HEAD 存放工程当前所处的分支,heads后面为分支名格式形如:ref: refs/heads/feat/cloudType
弄清楚上述文件信息后,发现.git\HEAD和.git\refs\heads\feat\cloudType文件内容异常,根据分支及最后的修改,通过.git\logs\refs目录下对应的分支变化信息修复异常文件。然后尝试使用git命令就恢复正常了。
补充子目录截图
- .git\logs子目录
- .git\refs子目录