Git 代码丢了?莫慌!

如果你的代码git add过就还有救~~~~

  1. 提交失败
    首先有个小插曲
    在我多次 git checkout ; git stash; git stash pop; git merge的一顿操作之后,git 提交代码的时候突然出现了下面的报错,(别问我为什么,事情发生的就是这么突然):
Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.

解决办法:

rm -f ./.git/index.lock
  • 后来了解到原因大致是:进程的管理有个上锁机制,正常情况下,会上锁,进程结束,然后解锁进程。但是由于我一系列的操作,导致git崩溃,已经上锁的index.lock没有来得及解锁而仍然存在。当我再用git add的时候,git发现已经存在了index.lock这个文件,导致报错
  1. 代码丢失
    估计是受👆的影响,虽然我记得我commit了 甚至还push到远程了,但是!!当我时隔两天再次回来开发的时候,代码没了(因为我中间重启过电脑😢。。。)。情况呢就是这么个情况,好在.git出现问题之前我应该是add过,还有救,接下来是自救的过程:
    第一步:找到之前add过的文件,有以下几种方法
    方法一:git fsck --lost-found 然后到.git/lost-found目录下找找看有没有你丢失的文件

方法二:git fsck > files.txt 直接写到文件中, 需要处理一下,只保留后面的字符串
tips:cmd+f2(mac 的f2是 fn+2) 可以多光标同时操作,很方便

方法三:find .git/objects -type f | xargs ls -lt | sed 60q查看最近60次add的文件
会直接打印出来,需要提取的是object/后面的值,第一个‘/’要去掉。例如第一个是43442c51e7c70e38eeedd9cfa82a1546271e0155

第二步: 通过git show 导出文件
一个一个的看可以用这个命令
git cat-file -p 0a2a25fd02e7baaf988b720df7c1cb8a7ea4729d > history.txt
可以写一个shell脚本

#!/bin/bash
for line in `cat files.txt`
do
echo "File:${line}"
git show ${line} > files/${line}.txt
done

第三步:手动复原想要的文件
点进去,有些可能是一些空文件,有一些正好是你丢失的文件,需要自己手动加回到正确的位置。前后找方法花了我三个小时的时间,但总比重新写一遍来的快。(这次丢的代码可是拆分了五六个组件来着,涉及到的文件修改超级多,心里默念,遇到凡事不要慌~~~

posted @ 2020-04-02 21:17  寸寸君  阅读(3435)  评论(1编辑  收藏  举报