git stash 内容误删除找回

本文介绍如何通过Git的高级命令恢复被误删的stash记录。利用git fsck --unreachable找出未引用的对象,结合git show查看具体提交内容,并最终应用git stash apply恢复所需的工作现场。

以下内容转载自 https://www.jianshu.com/p/8452eff3a75e

git stash内容误删找回

开发工作中,git是我们最常用的工具之一。最近我在开发中遇到这么一个问题:某次的开发内容使用git stash命令暂存了工作现场,之后手残直接删除了暂存的这次记录和内容。幸好git非常强大,我们还是有办法挽救的,虽然流程可能会麻烦一点,但是相比重写之前的开发内容,找回才是最佳的选择。

  1. 使用git fsck --unreachable命令查找所有unreachable的记录

--unreachable
Print out objects that exist but that aren’t reachable from any of the reference nodes.

这条命令会打印出所有不能从任何索引节点访问但是确存在的对象,回车之后我们会看到如下的显示:

 

git fsck --unreachable输出

如图中所示,大概有三种类型的内容,blobtreecommit。我们这样看的话是看不出任何有用信息的,我们需要另外一条命令将其内容show出来。

  1. 使用git show命令显示记录内容

Shows one or more objects (blobs, trees, tags and commits).

git show后面跟上要show的id,就可以展示这个id所对应的blobtreetagcommit。比如:git show eba0c76f3b722ecea955d67f4d1bc58d77ad0b78。比较诡异的是,这些id所对应的记录并不是有序的,如果想要找到之前误删的内容,需要我们一条条的去show出这些内容,然后判断是否是要找回的。万幸的是有两点如果能善加利用的话,会起到事半功倍的效果。一是我们只需要关心commit类型的内容,这些才是我们保存过或者提交过的内容;二是show出来的内容是有日期的,我们只要能大概记住误删内容的保存或提交日期,那么找起来自然轻松很多。

 

git show输出

  1. 使用git stash apply命令恢复记录内容

根据第二步找到我们所要恢复内容的id,使用git stash apply就可以完美治愈本次的手残,命令执行完后会发现,之前的stash内容又在工作区出现了,是不是很有趣呢,git果然是无比强大!这个地方需要注意的是git stash apply只能恢复commit类型的记录,如果使用这条命令来恢复blobtreetag可能会报错。

小记

git使用了这么久,其实还是有很多东西没能深入了解,比如blobtreetagcommit都代表了什么含义,各有什么作用,查找了一些资料,学习记录一下。

每个object包含三个部分:类型,大小和内容。大小就是指内容的大小,内容取决于对象的类型,有四种类型的对象,也就是上面提到的blobtreetagcommit

  • blob 用来存储文件数据,通常是一个文件
  • tree 有点像一个目录,它管理一些treeblob,就像文件和子目录
  • tag 标签,用来标记某一次的commit
  • commit 只指向一个tree,它用来标记项目某一个特定时间点的状态。它包括一些关于时间点的元数据,比如时间戳、最近一次提交的作者,指向上次提交的指针等等。



作者:楚丶liu香
链接:https://www.jianshu.com/p/8452eff3a75e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值