写点什么

git stash 误使用 drop 删掉本地保存,恢复代码一次记录

用户头像
良知犹存
关注
发布于: 2021 年 06 月 06 日

前言:

在使用 git 时候我们会临时切换一些分支,而切换时候你本地会有一些更改了的代码,但是这些代码还没有写完整,所以我们一般会进行 git stash 本地保存一下。然后等后面代码切换回来之后,再 git stash apply ,代码恢复之后我们会把这些临时本地保存代码 stash 记录清除掉,但是清除就可能出现误操作。我有次就遇到了误删,因为 stash list 里面有五六个版本,而且很多对应了一个 commit。这个时候我们怎么找回误删的的代码呢?


给大家分享一下自己的实操。


作者:良知犹存


转载授权以及围观:欢迎关注微信公众号:羽林君


或者添加作者个人微信:become_me



恢复步骤记录:

其实整体步骤不是很多,但是中间去一个个测试那个版本是否是你需要的比较耗费时间。首先,我们当使用 git stash drop 和 git stash pop 时候,git stash list 是看上去不可见了,但是实质上 git 并没有删除这个文件,就是你的引用关系被移除了,你需要去搜索那条对应被丢弃的 commit 下的代码。

显示出所有不可访问的对象

git fsck --lost-found
复制代码


<br/><br/>



一般来说有很多的搜索结果,多达上百条,这个时候我们可以去进行去排除一些用不到的数据。


我们来看看这些数据类型的含义:


blobs 每个 blob 代表一个(版本的)文件,blob 只包含文件的数据,而忽略文件的其他元数据,如名字、路径、格式等。tags tag 用于给某个上述类型的对象指配一个便于开发者记忆的名字, 通常用于某次 commit。


trees 每个 tree 代表了一个目录的信息,包含了此目录下的 blobs,子目录(对应于子 trees),文件名、路径等元数据。因此,对于有子目录的目录,git 相当于存储了嵌套的 trees。


commits 每个 commit 记录了提交一个更新的所有元数据,如指向的 tree,父 commit,作者、提交者、提交日期、提交日志等。每次提交都指向一个 tree 对象,记录了当次提交时的目录信息。一个 commit 可以有多个(至少一个)父 commits。


经过分析我们知道 commit 类型的后面跟着的 id 是我们可以用到的,但是搜索出来的列表不是按照时间来进行排序的,这样就给我们又造成了一些选择的负担,好在虽然搜索结果很多,但是 commit 类型的结果数量还是可以接受的,所以我用了一个笨办法,我把所有搜索到的结果都放到一个文件中,然后只保留下 commit 类型的数据。

查看每个 id 下的代码文件是否是需要恢复的

git stash apply  指定id
复制代码


<br/>如下所示:



但是不是一次就可以找到对应的 id,所以当查看到代码文件是有问题的时候,我再复位清除一次代码文件


git reset --hard
复制代码


直至找到对应的文件

结语

这就是我分享的某次 git 误删 stash 文件之后的恢复工作,如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。




作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。


                                                ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
复制代码


推荐阅读


【1】C++的智能指针你了解吗?


【2】嵌入式底层开发的软件框架简述


【3】CPU中的程序是怎么运行起来的 必读


【4】cartographer环境建立以及建图测试


【5】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比


本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。

发布于: 2021 年 06 月 06 日阅读数: 8
用户头像

良知犹存

关注

还未添加个人签名 2020.05.29 加入

还未添加个人简介

评论

发布
暂无评论
git stash误使用drop删掉本地保存,恢复代码一次记录