1
头图

背景

今天一时手误,在 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">

image

</div>

我打开其中一个文件夹,有entries.json的文件,我们可以看到这个文件的修改的所有记录,从上往下,最后一个记录是最新的修改

  • resource代表的是:这个文件在项目中的path路径。
  • entries代表的是:这个文件的所有修改生成的临时文件。

<div data-type="transform-warn" data-index="27">

image

</div>

然后在文件夹中找到这个文件,这个文件就是最新的修改。

<div data-type="transform-warn" data-index="29">

image

</div>

找到最新的修改,将文件代码内容拷贝出来。虽然有些繁琐,但也是最快、损失最小的恢复代码的方式。

发现最后还是少1个文件,发现有一种特殊的情况,History的文件夹下还有其他文件夹。

<div data-type="transform-warn" data-index="34">

image

</div>

最终的解决方案:vscode的编辑器的缓存历史中搜索找到解决办法。

希望大家在实际开发中能够经常提交(commit)和缓存(stash),如果真的忘记提交(commit)和手误(git discard all changes),可以参考本文章的「编辑器的缓存历史」方法帮助大家找回误删的文件。

❤️感谢关注「松宝写代码」,写得不止是代码。

松宝写代码
515 声望47 粉丝

昵称:saucxs | songEagle | 松宝写代码