前言:在使用git的时候,我们会临时切换一些分支,切换的时候,本地会有一些改动过的代码,但是这些代码还没有写完整,所以我们一般用gitstash保存在本地。然后后面代码切换回来之后,再gitstashapply,代码恢复后,我们会清除这些本地临时保存的codestash记录,但是清除可能会导致误操作。我遇到过一次误删,因为stashlist里面有五六个版本,很多都对应一个commit。这时候,我们如何找回被误删的代码呢?给大家分享一下我的实际操作。恢复步骤记录:其实整体步骤不多,但是中间要测试版本是不是自己需要的,比较费时间。首先,我们在使用gitstashdrop和gitstashpop的时候,gitstashlist好像是看不到的,但实际上git并没有删除这个文件,也就是你的引用关系已经去掉了,你需要搜索那个对应的丢弃的提交下的代码。显示所有无法访问的对象gitfsck--lost-found一般搜索结果很多,最多上百个,这时候我们可以去排除一些不用的数据。我们来看看这些数据类型的含义:blobs每个blob代表一个(版本化的)文件,blob只包含文件的数据,而忽略文件的其他元数据,如名称、路径、格式等.tags标签用于为上述类型的对象分配一个便于开发者记忆的名称,通常用于commit。trees每棵树代表一个目录的信息,包括blob、子目录(对应子树)、文件名、路径等该目录下的元数据。因此,对于有子目录的目录,git相当于存储了嵌套的树。commits每次提交都记录了提交一次更新的所有元数据,比如指向的树、父提交、作者、提交者、提交日期、提交日志等。每次提交都指向一个树对象,树对象记录了提交时的目录信息.一个提交可以有多个(至少一个)父提交。经过分析,我们知道committype后面是我们可以使用的id,但是搜索到的列表并没有按照时间排序,给我们的选择造成了一些负担。幸运的是,虽然搜索结果很多,但是commit类型的结果数量还是可以接受的,所以我用了一个笨办法,我把所有的搜索结果放到一个文件里,然后只保留commit类型的数据。检查每个id下的代码文件是否需要恢复。gitstashapply指定的id如下:但是一次找不到对应的id,所以当代码文件有问题的时候,我重新清空代码文件gitreset--hard,直到找到对应的文件作者:还是有良心的,白天努力工作,晚上创建公众号主。公众号内容除了技术,还有一些生活感悟。一个认真输出内容的职场老司机,也是一个在科技、摄影、音乐、篮球之外丰富生活的人。跟随我,与我同行。本文转载自微信公众号“羽林君”,可通过以下二维码关注。转载本文请联系羽林君公众号。
