git丢失分为以下几种情况
- 分支、commit丢失
这个比较简单,基于git reflog
拿到对应操作的hash即可找回 - 代码进过暂存区(即
git add
过 ),也就是说被git管理过
这个是本篇的重点,以前我一直以为是找不回来的,后来网上看到方案成功找回 - 代码仅在工作区,从没被git管理过
无法找回 (如有方案 请告知 😆)
记录下我遇到的上述第2种情况:
新建了1个代码文件xxx.swift
, 由于各种原因,被reset掉了,然后有进行了git pull --reb
拉代码操作。
首先执行下列命令,列出最近的150个改动文件,可以根据自己大概变动的文件数设置相应的值。
find .git/objects -type f | xargs ls -lt | sed 150q
控制台打印出如下:
image.png全部拷贝出来,使用多行光标编辑,选出红框标出内容,
.pack/.index
后缀的我都删除了,然后删除每行里面的/
, 得到了如下文件保存为file.txt
放在git仓库根目录image.png
然后创建一个shell脚本也放在git仓库根目录,
#!/bin/bash
mkdir files
for line in `cat ./file.txt`
do
echo "File:${line}"
git show ${line} > ./files/${line}.txt
done
执行脚本导出文件, 逐个预览找到丢失的代码文件即可
image.png
网友评论