文档章节

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

shaonbean
 shaonbean
发布于 2017/09/10 19:47
字数 963
阅读 11
收藏 0
点赞 0
评论 0
由于不正确的 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

© 著作权归作者所有

共有 人打赏支持
shaonbean
粉丝 0
博文 35
码字总数 57023
作品 0
徐汇
运维
git pull 和本地文件冲突问题解决

具体方法如下 git pull origin 分支 //出现错误 git stash 缓存起来 git pull origin 分支 git stash pop //还原 git stash clear 参考资料: http://www.01happy.com/git-resolve-conflicts......

大灰狼wow ⋅ 2014/09/01 ⋅ 4

《Git权威指南》读书笔记 第九章 恢复进度

9.1 恢复保存的进度 查看第五章保存的进度: 恢复进度: 查看工作区状态,进度已经找回了: 对找回进度的工作区做以下处理: (1)对当前的暂存区进行提交: (2)撤销之前的提交,工作区和暂...

一万 ⋅ 2016/07/18 ⋅ 0

git常见场景处理

过滤一些不需要的上传的文件或者文件夹 在项目根目录创建.gitignore文件,一行一个过滤规则 本地仓库的版本前进回退 git reset --hard HEAD^ #回退到上一个提交版本 git reset --hard HEAD^...

threefengcjf ⋅ 2016/10/24 ⋅ 0

git使用复习

创建版本库: 使用将这个目录变成git可以管理的仓库 在仓库内新建一个文件 使用把文件添加到仓库 使用 把文件提交到仓库后面输入的是本次提交的说明,可以输入任意内容 修改文件并使用查看当前...

eatnothing ⋅ 2016/03/20 ⋅ 0

Git配置以及命令总结

配置Git 首先在本地创建ssh key;>ssh-keygen -t rsa -C "your_email@youremail.com" 配置使用git仓库的人员姓名 >git config –global user.name “Your Name Comes Here” 配置使用git仓库......

阿泽Aze ⋅ 2017/12/27 ⋅ 0

Git常用命令

分布式版本控制系统 配置文件: /etc/gitconfig 系统对所有用户普遍适用的配置 ~/.gitconfig 用户目录下的配置文件只适用于该用户 工作目录下不外乎两种状态:以跟踪或未跟踪。 Changes to b...

Will-Pan ⋅ 2014/09/05 ⋅ 0

Git 学习笔记 (4):分支管理

4.1 多分支存在的意义 Git 不仅拥有分布式这样优秀的版本控制系统运作方式,而且具有强大的分支管理能力。多分支的存在,为项目的多人协作开发提供了便利,而强大的分支管理能力又进一步增强...

sailboat征帆 ⋅ 04/29 ⋅ 0

Git 与 Repo 入门

本文作者:伯乐在线 -AngelDevil 。未经作者许可,禁止转载! 欢迎加入伯乐在线专栏作者。 版本控制 版本控制是什么已不用在说了,就是记录我们对文件、目录或工程等的修改历史,方便查看更改...

伯乐在线 ⋅ 2016/05/24 ⋅ 0

GitLab基础命令 使用日志

6月进入新公司,公司用的GitLab进行代码托管。对于我这种半路出家的程序员,终端操作一直感觉是恶梦,虽然很多都是基本而且简单的命令,但本能有一种对非可视化操作的抗拒。但抗拒归抗拒,该...

阿元 ⋅ 2015/07/11 ⋅ 0

Git 大杂烩(初学git 常用的命令)

查看、添加、提交、删除、找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id git co -- <file> # 抛弃工作区修改 git co . # 抛弃工作...

Jarvix ⋅ 2016/06/24 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部