当前位置:首页 > 科技数码

丢弃 如何恢复丢弃的 git stash 数据

不要让git命令中的错误抹去你的工作

-何塞·古伊列梅·万兹

不要让git命令中的错误抹去你的工作

今天,我的同事在他四天的工作中几乎失去了他所做的一切。由于git命令不正确,他删除了stash[1]中保存的更改。经过这一段悲伤的插曲,我们想办法恢复他的作品,我们做到了!

首先警告:你在实现一个大功能的时候,请把它分成小块,定期提交。长时间工作不提交不是个好主意。

现在我们已经修复了错误,让我们演示如何从stash中恢复被错误删除的更改。

在我以仓库为例,只有一个源文件“main.c”,如下所示:

包含一个源文件的存储库

只能提交一次,即“初始提交”:

一次提交

该文件的第一个版本是:

文件的第一个版本

我会在文件中写一些代码。对于这个例子,我不需要做任何重大的改变,只需要在stash中放一些东西,所以我们只需要添加一行。“git diff”的输出如下:

git-diff输出

现在,假设我想从远程仓库中拉出一些新的更改,当时我并不打算提交自己的更改。所以,我决定先把它藏起来,然后在从远程仓库中取出更改后,将我的更改应用到主分支。我执行以下命令将我的更改移动到stash:

gitstash

使用命令git stash list查看stash,您可以在其中看到我的更改:

我们仓库的变化输出

我的代码已经在一个安全的地方,主分支现在是干净的(检查git命令状态)。现在我只需要从远程仓库中提取变更,并将我的变更应用回主分支,我也应该这样做。

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

gitstash drop

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

gitstash pop

该命令在将stash从堆栈中移除之前应用stash。如果我再次执行命令git stash list,我可以看到我在将它们从堆栈恢复到主分支之前删除了这些更改。OMG!接下来呢?

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

在存储库上执行git-fsck命令后输出

我让git-fsck显示所有不可访问的对象,因为我使用了参数-不可访问。如你所见,它表明没有不可访问的对象。当我从stash中删除我的更改时,我再次执行了相同的指令,得到了不同的输出:

删除存储更改后的输出

现在有三个不可访问的对象。那么哪一个是我的零钱呢?其实我也不知道。我需要通过执行git show命令来搜索每个对象。

执行git-show命令后输出

就是这样!身份证号95 ccbd 927 ad 4 CD 413 ee 2 a 28014 c 81454 F4 ede 82c对应我的零钱。现在我找到了丢失的零钱,我可以找回它。一种方法是把这个ID拿出来放到新的分支,或者直接提交。如果您获得了更改对象的标识号,您可以决定以最佳方式将更改再次应用到主分支。对于这个例子,我使用git stash来恢复对我的主分支的更改。

git stash apply 95 ccbd 927 ad 4 CD 413 ee 2 a 28014 c 81454 F4 ede 82 c

另一件需要记住的重要事情是,git会周期性地执行它的垃圾收集程序(gc),并且在它被执行之后,使用git fsck就不能再看到不可访问的对象了。

这篇文章首先发表在作者的博客上,并被授权转载。

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

这篇文章最初是由LCTT编译的

10篇文章

贡献时间:33天

[1]:斯塔什-https://www.git-scm.com/docs/git-stash

[2]:原文发表-http://jvanz . com/verificing-missing-data-from-stash . html # verificing-missing-data-from-stash

[3]:https://creativecommons.org/licenses/by/4.0/抄送

[4]:何塞·古伊列梅·万斯-https://opensource.com/users/jvanz

1.《丢弃 如何恢复丢弃的 git stash 数据》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《丢弃 如何恢复丢弃的 git stash 数据》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/1627519.html

上一篇

车位锁多少钱一个 中山这个小区超200个车位锁了一整年?官方回应来了!

下一篇

丑男图片大全 网络十大丑男照片

第一代身份证什么时候开始 我的第一代身份证

我的起源宠物大全 《我的起源》1506年宠物蛋位置大全!是时候开启蹲蛋模式了!

我的起源宠物大全 《我的起源》1506年宠物蛋位置大全!是时候开启蹲蛋模式了!

捕捉宠物是起源星球的乐趣之一。除了在野外漫步寻找宠物,宠物也会把卵留在树洞里,探险家可以吮吸它们的宠物卵带回家孵化~   那么,宠物蛋在哪里?通过智能计算,莫非收到了大神们的蹲坑策略,我们来看看~ 459各种宠物蛋的位置 在459地图中,电蛙、烧蜥蜴、冰狐等特殊宠物活跃在这片土地上。喜欢收集不同宠...

我的世界引雷怎么用 我的世界引雷附魔书有什么用

我的世界引雷怎么用 我的世界引雷附魔书有什么用

我的世界结界之书有什么用?边肖相信我所有的朋友都想知道。下面的边肖带给你一本关于我的世界在吸引雷电和魔法中的作用的书。希望你喜欢。  《雷霆附魔之书》在我们世界中的作用介绍; 在雷雨天气,当生物被投掷的三叉戟击中(近距离攻击无效),被击中的生物会被召唤一道闪电。该生物必须暴露在空开阔的地方...

我的世界颜色 我的世界彩色字体符号是什么

我的世界颜色 我的世界彩色字体符号是什么

我的世界色字体符号是什么?我相信我所有的朋友都会想知道的。下面这个小系列给大家带来一篇关于我的世界颜色字体符号的文章,希望大家喜欢。  我的世界颜色字体符号是什么: 0黑色 1深蓝色 2深绿色 3天蓝色 4红色 5深紫色 6金黄色 7浅灰色 8深灰色 9薰衣草 浅绿色 浅蓝色 浅红色 丁香...

李苦禅画什么 李苦禅 | 我的字是画字,而我的画是写出来的!但别傻画!

  • 李苦禅画什么 李苦禅  |  我的字是画字,而我的画是写出来的!但别傻画!
  • 李苦禅画什么 李苦禅  |  我的字是画字,而我的画是写出来的!但别傻画!
  • 李苦禅画什么 李苦禅  |  我的字是画字,而我的画是写出来的!但别傻画!

tony马 马天宇为《我的莫格利男孩》扫楼带真扫把,Tony马老师上线,欢乐不断

  • tony马 马天宇为《我的莫格利男孩》扫楼带真扫把,Tony马老师上线,欢乐不断
  • tony马 马天宇为《我的莫格利男孩》扫楼带真扫把,Tony马老师上线,欢乐不断
  • tony马 马天宇为《我的莫格利男孩》扫楼带真扫把,Tony马老师上线,欢乐不断

铧 人物专访丨《我和我的园区梦》专访——胡琳铧

  • 铧 人物专访丨《我和我的园区梦》专访——胡琳铧
  • 铧 人物专访丨《我和我的园区梦》专访——胡琳铧
  • 铧 人物专访丨《我和我的园区梦》专访——胡琳铧

我的亲爹和后爸 《我的亲爹和后爸》完美收官!近50个江阴取景地,都在镜头里!

  • 我的亲爹和后爸 《我的亲爹和后爸》完美收官!近50个江阴取景地,都在镜头里!
  • 我的亲爹和后爸 《我的亲爹和后爸》完美收官!近50个江阴取景地,都在镜头里!
  • 我的亲爹和后爸 《我的亲爹和后爸》完美收官!近50个江阴取景地,都在镜头里!