突然断电导致git损坏修复

背景

使用ide开发时突然断电启动后所有文件都成了没有提交的文件。打开git视图日志也消失不见

# git命令执行结果如下
git status
No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   .github/FUNDING.yml
        new file:   .gitignore
        new file:   DESIGN.md
        new file:   LICENSE
        new file:   PROBLEM.md
        new file:   README.md
        new file:   xxx/pom.xml
        new file:   xxx
        ......
        new file:   xxxn
git pull
You are not currently on a branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

git branch
fatal: Failed to resolve HEAD as a valid ref.
git reflog
fatal: your current branch appears to be broken

分析

突然断电应该时git文件受损导致

  • 进入项目下的.git目录
  • 分析config文件是否损坏,如损坏进行修复

    如格式已损坏或空白 去别的项目.git下把config拷贝过来
    按照自己项目的情况进行修改
    如添加和删除本地分支和远端分支节点
    修改远端分支地址

    # 格式如下
    [core]
    	repositoryformatversion = 0
    	filemode = false
    	bare = false
    	logallrefupdates = true
    	symlinks = false
    	ignorecase = true
    # 远端创库
    [remote "origin"]
    	# 远端创库地址
    	url = https://gitee.com/xxx/xxx.git
    	fetch = +refs/heads/*:refs/remotes/origin/*
    # 本地master创库
    [branch "master"]
    	remote = origin
    	merge = refs/heads/master
    # 本地dev创库
    [branch "dev"]
    	remote = origin
    	merge = refs/heads/dev	
    
  • 进入.git/refs/heads目录下打开当前分支文件查看是否有内容

如打开dev文件 查看里面的内容 该文件保存的是dev分支最后一次提交的commitId
如4146261a90c75d89235fee5566852dd996326666

  • 进入.git/refs/remotes/origin目录查看当前远程分支是否有内容

参考上一步
origin为远程创库副本名称 如果为其它名称需进入对应目录

  • 如果没有内容去日志文件或远端git创库查看提交id写进去
    • 本地创库分支文件无内容
      # 提交记录格式 
      # 4146261a90c75d89235fee5566852dd996326666 才是commitId
      daab13154a48de2325ca4d4b3c68d80d25a10def 4146261a90c75d89235fee5566852dd996326666 angel <angel@163.com> 1711102685 +0800	commit: 汇总功能一些controller里的逻辑移动到service里
      

      去.git\logs\refs\heads下
      打开对应分支文件 翻动到最下面 参考上面的提交记录格式 把最后提交的commitId复制出来转贴到上一步的空白分支文件里
      复制的一定要是commitId不要复制错了

    • 远程创库分支文件无内容
      • 本地远程创库副本是最新的

        去远程创库网页复制最新的commitId到对应文件里

      • 本地创库副本不是最新的

        根据最后一次提交记录 到提交记录文件下寻找commitId或去远程创库web端寻找
        提交记录文件
        本地创库的提交记录可以根据提交时的描述查找
        远端创库副本提交记录在.git\logs\refs\remotes\origin下打开对应分支拖到最下面复制commitId

        e0e4c6aab3a9ce1f02671e5c8fb907bab642e272 4146261a90c75d98471fee5566852dd996326666 angel <angel@163.com> 1711161193 +0800	update by push
        

修复

  • config修复

    项目下.git/config损坏
    拿份好的替换
    在修改分支部分和替换远端创库地址

  • 本地分支文件修复

    项目下.git/refs/heads下分支文件空白
    去.git\logs\refs\heads下
    打开分支文件拉到最下面
    复制commitId到空白文件中

  • 远端分支文件修复

    项目下.git/refs/remotes\origin下分支文件空白
    去.git\logs\refs\remotes\origin下
    打开分支文件拉到最下面
    复制commitId到空白文件

相关推荐

  1. 突然断电导致git损坏修复

    2024-03-29 04:02:02       38 阅读
  2. sqlite 损坏 修复

    2024-03-29 04:02:02       43 阅读
  3. Linux rpm和ssh损坏修复

    2024-03-29 04:02:02       24 阅读
  4. 恢复因服务器突然关机导致的innodb数据丢失

    2024-03-29 04:02:02       54 阅读
  5. 服务器数据损坏了有办法修复吗 ?

    2024-03-29 04:02:02       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 04:02:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 04:02:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 04:02:02       87 阅读
  4. Python语言-面向对象

    2024-03-29 04:02:02       96 阅读

热门阅读

  1. 算法日记————对顶堆(4道题)

    2024-03-29 04:02:02       44 阅读
  2. go env 命令详解

    2024-03-29 04:02:02       40 阅读
  3. MongoDB聚合运算符:$isArray

    2024-03-29 04:02:02       35 阅读
  4. Python 的chatGPT API小例子

    2024-03-29 04:02:02       45 阅读
  5. scau:程序设计与算法基础 学习笔记

    2024-03-29 04:02:02       43 阅读
  6. 基于Ubuntu的Linux系统安装jsoncpp开发包过程

    2024-03-29 04:02:02       47 阅读