背景
今天一时手误,在 vscode 的远程服务器中,工程下所有未提交的文件,在切换分支的时候,执行了 discard all changes,所有文件在 vscode、Finder、Trash 中都没有找到。
解决方案
方案一:如果 vscode 中打开了所有文件,会显示文件已经删除,这个时候可以将文件另存。非常不幸,我关闭了绝大部分文件,只剩下1个文件没有关闭。
方案二:git 对已经修改的文件会有缓存,但前提是之前提交(commit)过代码。我还没有commit过。所以 git 没有缓存,看来 git 是指望不上了。
方案三:网上找到 vscode 有 Cache,但是在 Cache 目录下没有找到丢失的文件。
想想 git 的恢复能力:在既没有暂存也没有提交的情况下,Git 无法帮助你恢复这些文件。这是因为这些文件没有被添加到暂存区,Git 无法得知这些文件的状态。
最终方案
在这种情况下,考虑在编辑器的缓存历史中搜索找到解决办法。
还是要从 vscode 下手,因为是服务器vscode,在路径/*/home/chengxinsong/.vscode-server/data/User/History仔细看了该目录中的内容。
在 User 目录下有个 History 的目录,里面的文件夹更新的时间跟我改代码的时间接近,又看了下每个文件夹里面的内容,虽然文件名跟我的文件名不一样,但是文件的扩展名一致。这些文件就是代码的历史文件。
下面每个目录对应一个文件。
<div data-type="transform-warn" data-index="22">
</div>
我打开其中一个文件夹,有entries.json的文件,我们可以看到这个文件的修改的所有记录,从上往下,最后一个记录是最新的修改。
- resource代表的是:这个文件在项目中的path路径。
- entries代表的是:这个文件的所有修改生成的临时文件。
<div data-type="transform-warn" data-index="27">
</div>
然后在文件夹中找到这个文件,这个文件就是最新的修改。
<div data-type="transform-warn" data-index="29">
</div>
找到最新的修改,将文件代码内容拷贝出来。虽然有些繁琐,但也是最快、损失最小的恢复代码的方式。
发现最后还是少1个文件,发现有一种特殊的情况,History的文件夹下还有其他文件夹。
<div data-type="transform-warn" data-index="34">
</div>
最终的解决方案:vscode的编辑器的缓存历史中搜索找到解决办法。
希望大家在实际开发中能够经常提交(commit)和缓存(stash),如果真的忘记提交(commit)和手误(git discard all changes),可以参考本文章的「编辑器的缓存历史」方法帮助大家找回误删的文件。
❤️感谢关注「松宝写代码」,写得不止是代码。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。