不要让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