当前位置: 首页 > news >正文

教你找回 git stash 数据中的数据

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

导读由于不正确的 git 命令,他把保存在 stash 中的更改删除了。在这悲伤的情节之后,我们试图寻找一种恢复他所做工作的方法,而且我们做到了!首先警告一下:当你在实现一个大功能时,请将它分成小块并定期提交。长时间工作而不做提交并不是一个好习惯。下面就演示一下怎样从 stash 中恢复误删的更改。

创建测试分支

我用作示例的仓库中,只有一个源文件 “main.c”,如下所示:

教你找回 git stash 数据中的数据教你找回 git stash 数据中的数据
它只有一次提交,即 “Initial commit”:
教你找回 git stash 数据中的数据教你找回 git stash 数据中的数据

该文件的第一个版本是:

教你找回 git stash 数据中的数据教你找回 git stash 数据中的数据

我将在文件中写一些代码。对于这个例子,我并不需要做什么大的改动,只需要有什么东西放进 stash 中即可,所以我们仅仅增加一行。“git diff” 的输出如下:
教你找回 git stash 数据中的数据教你找回 git stash 数据中的数据

误操作git stash

现在,假设我想从远程仓库中拉取一些新的更改,当时还不打算提交我自己的更改。于是,我决定先 stash 它,等拉取远程仓库中的更改后,再把我的更改恢复应用到主分支上。我执行下面的命令将我的更改移动到 stash 中:

git stash

使用命令"git stash list" 查看 stash,在这里能看到我的更改:

教你找回 git stash 数据中的数据教你找回 git stash 数据中的数据

我的代码已经在一个安全的地方,而且主分支目前是干净的(使用命令 git status检查)。现在我只需要拉取远程仓库的更改,然后把我的更改恢复应用到主分支上,而且我也应该是这么做的。

但是我错误地执行了命令:

git stash drop

它删除了 stash,而不是执行了下面的命令:

stash pop

这条命令会在从栈中删除 stash 之前应用它。如果我再次执行命令

git stash list

,就能看到在没有从栈中将更改恢复到主分支的之前,我就删除了它。OMG!接下来怎么办?

找回git stash 数据

好消息是:git 并没有删除包含了我的更改的对象,它只是移除了对它的引用。为了证明这一点,我使用命令 git fsck,它会验证数据库中对象的连接和有效性。这是我对该仓库执行了 git fsck 之后的输出:
教你找回 git stash 数据中的数据教你找回 git stash 数据中的数据

由于使用了参数 --unreachable,我让 git-fsck 显示出所有不可访问的对象。正如你看到的,它显示并没有不可访问的对象。而当我从 stash 中删除了我的更改之后,再次执行相同的指令,得到了一个不一样的输出:
教你找回 git stash 数据中的数据教你找回 git stash 数据中的数据

现在有三个不可访问对象。那么哪一个才是我的更改呢?实际上,我不知道。我需要通过执行命令 git show 来搜索每一个对象。

教你找回 git stash 数据中的数据教你找回 git stash 数据中的数据

就是它!ID 号 95ccbd927ad4cd413ee2a28014c81454f4ede82c 对应了我的更改。现在我已经找到了丢失的更改,我可以恢复它。其中一种方法是将此 ID 取出来放进一个新的分支,或者直接提交它。如果你得到了你的更改对象的 ID 号,就可以决定以最好的方式,将更改再次恢复应用到主分支上。对于这个例子,我使用 git stash 将更改恢复到我的主分支上。

git stash apply 95ccbd927ad4cd413ee2a28014c81454f4ede82c

另外需要重点记住的是 git 会周期性地执行它的垃圾回收程序(gc),它执行之后,使用 git fsck 就不能再看到不可访问对象了。

via: https://opensource.com/article/17/8/recover-dropped-data-stash

作者:Jose Guilherme Vanz 译者:firmianay 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

原文来自:https://linux.cn/article-8819-1.html

本文地址:http://www.linuxprobe.com/find-git-stash-data.html

转载于:https://my.oschina.net/u/3308739/blog/1533739

相关文章:

  • 驱动移植过程中DMA内存相关接口替换
  • HBase二级索引实现方案
  • 前向星和链式前向星
  • 开源PaaS Rainbond v3.7.0-rc1版本更新,系统生产稳定性大幅提升
  • zabbix3.0.4监控linux主机cpu使用率超过90%的时候报警
  • corosync + pacemaker +mysql +nfs
  • Java+大数据开发——Hadoop集群环境搭建(二)
  • python 循环列表的同时做删除操作
  • Mysql中数据类型括号中的数字代表的含义
  • python 正则匹配字母数字中的任意数字,字母
  • 大保健就是做公益?马云的一招让这个特殊群体赞不绝口
  • 儿童做家务年龄对照表,80%的父母都后悔看晚了…
  • Windows Embedded Standard CTP发布!
  • 阿布扎比有一个“智慧港口”
  • 4000余台ElasticSearch服务器遭PoS恶意软件感染
  • 0x05 Python数据分析,Anaconda八斩刀
  • android图片蒙层
  • CSS居中完全指南——构建CSS居中决策树
  • CSS实用技巧
  • Java新版本的开发已正式进入轨道,版本号18.3
  • jquery ajax学习笔记
  • Laravel5.4 Queues队列学习
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • mysql innodb 索引使用指南
  • node和express搭建代理服务器(源码)
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Rancher如何对接Ceph-RBD块存储
  • React系列之 Redux 架构模式
  • scala基础语法(二)
  • vue-loader 源码解析系列之 selector
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 后端_ThinkPHP5
  • 基于组件的设计工作流与界面抽象
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 码农张的Bug人生 - 初来乍到
  • 漂亮刷新控件-iOS
  • 如何用vue打造一个移动端音乐播放器
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 事件委托的小应用
  • 由插件封装引出的一丢丢思考
  • 在Unity中实现一个简单的消息管理器
  • 白色的风信子
  • AI算硅基生命吗,为什么?
  • # 计算机视觉入门
  • #《AI中文版》V3 第 1 章 概述
  • #pragma data_seg 共享数据区(转)
  • $refs 、$nextTic、动态组件、name的使用
  • (HAL库版)freeRTOS移植STMF103
  • (ibm)Java 语言的 XPath API
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (生成器)yield与(迭代器)generator
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (原創) 系統分析和系統設計有什麼差別? (OO)