首页 > 其他分享 >教你找回 git stash 数据中的数据

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

时间:2023-10-28 09:00:21浏览次数:33  
标签:git 更改 对象 stash fsck 数据 分支

创建测试分支

我用作示例的仓库中,只有一个源文件 “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 就不能再看到不可访问对象了。

标签:git,更改,对象,stash,fsck,数据,分支
From: https://www.cnblogs.com/roccn/p/17793482.html

相关文章

  • 工作中遇到的坑:pg数据库保存时间[2023-10-10T01:12:32:910.345343]自动抹零
    今天数据入库的时候遇到了一个小问题。问题postrgrepSQL数据库中存储2023-10-10T01:12:32:910.345343类型的数据,数据库使用timestamp类型,存储完成后,会变成2023-10-1001:12:32.91自动将0抹掉解决方案使用TO_CHAR:数据库数据SELECT*FROMtest执行结果SELECTname,age,TO_CHAR(inp......
  • Python 利用pandas和mysql-connector获取Excel数据写入到MySQL数据库
    如何将Excel数据插入到MySQL数据库中在实际应用中,我们可能需要将Excel表格中的数据导入到MySQL数据库中,以便于进行进一步的数据分析和处理。本文将介绍如何使用Python将Excel表格中的数据插入到MySQL数据库中。导入必要的库首先,我们需要导入pandas库和MySQLConnector/Python库......
  • git add后的代码丢失了怎么找回
    打开项目所在文件夹,点击鼠标右键,选择GitBashHere 1、首先执行下列命令,列出最近的150个改动文件,可以根据自己大概变动的文件数设置相应的值。find.git/objects-typef|xargsls-lt|sed150q 2、进入.git目录,如果没有该文件夹,执行如下操作3、在.git目录里分别......
  • 数据结构-顺序表
    一、概念1.顺序存储顺序存储结构,是指用一段地址连续的存储单元依次存储线性表的数据元素2.存储方式在编程语言中,用一维数组来实现顺序存储结构,在C语言中,把第一个数据元素存储到下标为0的位置中,把第2个数据元素存储到下标为1的位置中,以此类推。3.长度和容量数组的长度指的是数组......
  • Logstash input插件
    input插件用于指定输入源,一个pipeline可以有多个input插件,我们主要围绕下面几个input插件进行介绍stdinfilebeatkafkahttp2.1stdin插件从标准输入读取数据,从标准输出中输出内容cat/etc/logstash/conf.d/stdin_logstash.conf#从终端中输入,输出到中端input{ stdi......
  • github安装文档
    服务器:centos7.91.下载指定版本到服务器wgethttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.0.0-ce.0.el7.x86_64.rpm2、安装基础依赖并启动#安装依赖,其中,postfix是邮件发送服务,其他为SSH协议需要的sudoyuminstall-ycurlpolicycoreutils-pythonopens......
  • CF练习题16 (毒瘤数据结构)
    Lomsatgelral把树拍成一条链,询问子树等于询问区间。这样一看这道题就非常莫队。但是有要求个数最多的颜色的编号,我们可以用线段树动态维护颜色的最大值。这样,一个无脑莫队线段树的暴力就做出来了。intn,a[N];intdfn[N],nfd[N],cnt;intb[N],siz[N];vector<int>g[N];in......
  • js的对像及数据及数据类型的转换
    varcat={'color':'blank','name':'加菲猫','bland':'波斯猫','eat':function(){console.log('我能吃肉');},'drunk':functi......
  • 使用vscode 用git 拉取代码,提示:在签出前,请清理存储库工作树
    使用vscode用git拉取代码,提示:在签出前,请清理存储库工作树如图:问题:git仓库上的代码和本地代码存在冲突了所以会报这个报错。解决办法:手动解决①gitstash先将本地修改存储起来②gitpull拉取远程③gitstashpop还原暂存内容放弃本地修改,直接覆盖①gitreset--hard②g......
  • API商品数据接口调用爬虫实战
    随着互联网的发展,越来越多的商家开始将自己的商品数据通过API接口对外开放,以供其他开发者使用。这些API接口可以提供丰富的商品数据,包括商品名称、价格、库存、图片等信息。对于爬虫开发者来说,通过调用这些API接口,可以更加便捷地获取商品数据,避免了爬取网页数据的繁琐过程。本文将......