事情是这样的,最近在学习vite+vue3项目搭建,基本结构已经好了,准备上传git到仓库中去,就在这时手欠执行了git reset --hard 由于之前也没有commit过,也就没有上个版本,所以我写的所有代码都消失了,我滴乖乖,这不完犊子了吗😨😨😨
项目就变成了这样:
然后就开始在网上找跟我同样惨的人😂 发现了git fsck --lost-found这个命令
这里只有git add过的文件才可以通过git fsck --lost-found找到,所以很庆幸我add过😂,输入命令后在.git文件中会出现个lost-found文件夹,里面有一些长串id的文件,文件前面显示了tree,应该是指文件的类型,然后就找到了下面这张图
这是git底层存储的方式,可以看出有commit tree blob三种类型
commit数据结构在每次提交之后都会生成一个,当我们进行commit之后,首先会创建一个commit组件,之后创建一个tree组件,把所有的文件信息都储存在里面,每个blob代表一个文件,都可以在tree里找到blob组件并不会对文件信息进行存储,而是只对文件的内容进行记录,文件信息存储在tree里 使用git show查看内容
好家伙这不就是我要找回的文件吗,可是要怎么恢复呢😶🌫️
git ls-tree可以更加直观的看到tree
然后在git show blob文件,就能看到消失的代码啦
还好找回来了😮💨 虽然不能直接恢复到项目当中,但也是成功的找回代码啦✌