不管是上传代码,还是拉取代码,都要及时的git add .和git commit -m "xx"。
如问题二的使用stashq前也要先保存到本地仓库。
如果你pull了远程代码,或者reset --head操作,但未将工作区代码保存本地仓库,那么可能面临工作区代码被覆盖的风险。
情况1:
如果忘记git add .和git commit -m "xx",那么如果本地代码丢失就再也找不回了。
情况2:
做了git add .和git commit -m "xx",那么可使用reset --head回退代码版本。网上很多教程,后期再补充。
情况3:
做了git add .但忘记git commit -m "xxx",那么可根据以下方法解决。
参考博文:记一次找回丢失的 git add 未 git commit 的文件历程 - 简书 (jianshu.com)
1. git fsck --lost-found 然后到 .git/lost-found 目录下找看有没有丢失的文件,对我没起到作用。
2.
find .git/objects -type f | xargs ls -lt | sed 30q
查看最近add 过的30个文件,可以根据自己大概变动的文件数设置相应的值。(注意:windows没有find命令,在git bash执行即可),会在控制台打印出如下格式的内容:
若最近改动文件较多,可加大文件个数,如30改为500,打印结果会有时间信息,待会将时间不符的删除即可。
可手动挨个查看,但效率太低:
如上图第一条记录,仅保留 48 和 0c1487b9407a0287fd2a6ad5e7aa2ba597d108并拼接,其余的舍弃。双击file.txt文件即可打开查看,注意文件名不要与工程里的冲突。
git show 480c1487b9407a0287fd2a6ad5e7aa2ba597d108 >> file.txt
使用ide工具配合脚本,批量处理文本文件。
将打印信息导出到文本文件中:
find .git/objects -type f | xargs ls -lt | sed 30q > file.txt
用ide工具(如VScode),打开file.txt文件。先将时间信息过于老旧的记录删除。再利用替换功能和正则表达式,拼接处完整可用记录码:
手动创建一个 file.sh 脚本并执行,如下:
#!/bin/bash
dir="./files"
if [ ! -d "$dir" ];
then
mkdir $dir
fi
for line in `cat file.txt`
do
echo "File:${line}"
git show ${line} > $dir/${line}.txt
done
执行成功后,在files目录下,挨个查看txt文件。可能有的文件会是乱码或是空的或是无用信息,不用管。找到你所修改后的那个文件,把他下载到其他路径,别再丢了。
最好是新建个目录拉个干净的工程或者直接在本工程中更改,将刚才下载的你的文件,挨个找到复制进工程,如此便可了。