当不小心误用其他分支的stash缓存

92 阅读2分钟

前言

前几天在写前端自动化测试的时候,中途来了个需求,于是我下意识地把这段时间的自动化测试case缓存起来,然后根据线上分支切需求分支进行开发。

git add .
git stash

在开发需求的时候,不知道哪个环节我去消费了缓存的代码

git stash pop

当需求完成的时候commit的时候才发现,咦,怎么我自动化测试的代码在这里的,我不是基于线上分支切的代码吗?为了先把需求代码先上到测试环境,我reset所有自动化测试分支的代码。 到今天我想继续写自动化测试case的时候,看到stash list里没有我缓存的代码,我瞬间有点慌,我注入redux和mock useReact的操作都写在之前的代码上呀,还写那么多烦人的case。再重新写一次是不可能的,想办法恢复数据吧

恢复stash数据

git fsck --lost-found. //找回git add过但是已经不存在文件中的内容

通过上述命令找出了几百上千条记录,再不知道之前的ID号的前提下,怎么从这一堆ID找到哪个是被我不小心消费的ID呢,难道要一个个git show去查看吗?

于是我通过用awk输出第三列得到所有id,再用xargs传给git show命令输出结果,把输出的结果写进stashRes.ts文件里

git fsck --unreachable | awk '{print $3}' | xargs git show >> stashRes.ts

由于我之前记得写过reduxWrapperWithDispatch注入组件,所以在文件里通过搜索reduxWrapperWithDispatch找到我丢失的那些内容和commitId

正当我满怀期待去恢复时

git stash apply Id

竟然报Retrieve a deleted stash that is not a stash-like commit错误 于是我恢复那个Id的代码,并且用一个新的分支执行那个Id

git reset -- hard Id
git branch master-auto-test Id

就这样,我拿回了被我误消费的几天工作内容的缓存。