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

作者: 良知犹存

前言:

在使用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



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

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

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

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

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

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

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

git stash apply  指定id


如下所示:

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

git reset --hard

直至找到对应的文件

结语

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


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

                                                ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

推荐阅读

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

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

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

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

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

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

原文作者:良知犹存

原文链接:https://www.cnblogs.com/conscience-remain/p/14856557.html

更多推荐

更多
  • Git秘籍-十二、使用 Github 在这一章中,我将讨论使用 Github 来托管存储库。目前这是一个流行的开源项目托管平台。我们首先创建一个 Github 帐户并配置 SSH 密钥。完成后,您将学会如何:从公共 Github 库克隆克隆并推送至
    Apache CN

  • Git秘籍-十三、更多秘籍 在这最后一章,我将讨论一些尚未涉及的细节,这些细节迟早会成为你不可或缺的。您将了解到:如何使用命令`$ git diff`比较不同版本的文件?如何克服关于行尾的问题?配置忽略文件的三种不同方法使
    Apache CN

  • Git秘籍-十一、托管 Git 存储库 一旦你和你的同事们学会了如何提交、使用分支和远程操作,你就会想把 git 作为一个团队来使用。在这一章中,我将展示如何建立一个虚拟主机来与他人共享 git 库。 Git 可以使用 ssh、http、https 和 git 网络协议。要
    Apache CN

  • Git秘籍-十、远程存储库和同步 所有 VCS 系统背后的内在原因是使一组开发人员之间的协作尽可能无缝。最后,我们已经到了可以讨论如何使用 git 进行小组工作的时候了。我们将从最简单的设置开始,所有的存储库都可以通过本地存储获得。首先你必须学会如何使用遥控器。我
    Apache CN

  • Git秘籍-九、解决冲突 到目前为止,我们主要关注修订图的结构。我们通常使用别名`$ git simple-commit`提交;因此,我们生成的文件非常简单。事实上,到目前为止我们创建的几乎每个文件都只包含一个单词。一旦创建,这些文件很少被修改。此外,秘籍是以
    Apache CN

  • Git秘籍-四、管理文件 在本章中,我们将练习和分析在工作目录中使用的文件系统命令。我们将创建、修改、删除和重命名文件,并检查这些操作如何影响存储库。正如您已经知道的,git 不会自动注册工作目录中的更改。要创建新版本,您必须发出特殊命令: ``` $ g
    Apache CN

  • Git秘籍-五、分支 每当我被问及从旧版本的控制系统(VCS,如 CVS 或 Subversion)转换到 git 的好处时;我用这个简短的陈述来回答:git 分支模型。一旦你学会使用它,你会问自己,没有它我究竟是怎么工作的?事实上,git 处理分支的方式
    Apache CN

  • Git秘籍-六、合并分支 创建和切换分支的命令允许您将项目分成独立的开发线。例如,您可以创建分支来启动应用中的新功能或实现修复。迟早你会完成一个特性或修复,然后很可能,你会想把你的努力融入到开发的主线中。连接不同分支的过程可以使用两种不同的技术来完成。第一个是
    Apache CN

  • Git秘籍-七、分支变基 你可以用`$ git merge`和`$ git rebase`命令连接两个不同的开发历史。在这一章中,我们将讨论重定基。合并在前一章已经讨论过了。一般来说,重置基础是一种将分歧分支转换成线性历史的方法。您可以将它看作是一个自动的
    Apache CN

  • Git秘籍-八、修改历史记录 本章介绍修改修订图结构的各种命令。有时你需要将三个不同的版本合并成一个版本。在其他时候,您可能需要相反的操作:将一个单独的提交分成许多单独的提交。无论是哪种情况,请记住 git 版本是永久的。他们永远不会改变。一旦创建了修订,就无法对
    Apache CN

  • 近期文章

    更多
    文章目录

      推荐作者

      更多