社区编辑申请
注册/登录
Git如何恢复被搁置的修改记录
开发 前端
在这篇文章中,我们看到了git stash 是如何工作的,以及当我们使用它时它是如何丢弃一个条目的。当我们知道一个被丢弃的条目的哈希值时,我们仍然可以使用它,以及如何找到提交的哈希值.

大家好,我是指北君。

像 git stash和 git stash pop 这样的命令是用来搁置(藏匿)和恢复我们工作目录中的变化的。在本教程中,我们将学习如何在 Git 中恢复隐藏的修改记录。

在工作目录中存储更改

在我们的例子中,假设我们已经克隆了一个 Git Repo 。现在,让我们对 README.md 文件做一些修改,只需在最后添加一行,并检查我们工作目录的状态。

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md

no changes added to commit (use "git add" and/or "git commit -a")

在这里,我们可以使用 git stash 命令来暂时搁置我们的修改。

$ git stash
Saved working directory and index state WIP on master: sdfkdsx Updated pom.xml

现在,如果再做一次 git status,我们会看到我们的工作目录是干净的。

$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

恢复存储的变化并找到哈希值

让我们来看看如何恢复隐藏的修改,并找到与隐藏的提交相关的哈希值。

将隐藏的修改恢复到工作目录中

我们可以像这样把隐藏的修改带回到我们的工作目录中。

$ git stash pop
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs...

正如我们在最后一行看到的那样,git stash pop 不仅恢复了被存储的修改,而且还删除了对其相关提交的引用。

当终端打开时定位哈希值

如果我们的终端仍然是开放的,我们可以很容易地找到执行 git stash pop 后产生的哈希值。在我们的例子中,显示在最后一行的哈希值是59861637... 。

在终端关闭后恢复哈希值

即使我们已经关闭了终端,我们仍然可以通过以下方式找到我们的哈希值。

$ git fsck --no-reflog
Checking object directories: 100% (256/256), done.
Checking objects: 100% (302901/302901), done.
commit 598616...

现在我们可以看到被丢弃的储藏室的提交哈希值了。

恢复被丢弃的储藏库

通常情况下,一旦我们应用了一个储藏库条目,我们就不需要它了。然而,在某些情况下,我们可能希望在丢弃一个储藏库条目之后再去找它。例如,如果使用 git reset -hard HEAD 会丢掉我们工作目录中所有未提交的修改。在这种情况下,我们可能希望召回一些早期的藏匿修改,尽管它们被丢弃了。

使用哈希值来恢复储藏的内容

使用哈希值来处理悬空的提交,我们仍然有可能恢复这些变化。

$ git stash apply 59861637f...
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: README.md

no changes added to commit (use "git add" and/or "git commit -a")

我们可以看到,我们的工作目录已经恢复了先前所隐藏的变化。

找到所有的哈希提交

如果我们没有现成的哈希值,我们可以找到它。

git fsck --no-flog | awk '/commit/ {print $3}'

这里,我们把 -no-flog 选项和 awk 结合起来,只为我们过滤出哈希值。

总结

在这篇文章中,我们看到了git stash 是如何工作的,以及当我们使用它时它是如何丢弃一个条目的。当我们知道一个被丢弃的条目的哈希值时,我们仍然可以使用它,以及如何找到提交的哈希值.

责任编辑:武晓燕 来源: Java技术指北
相关推荐

2022-06-20 09:01:23

2022-06-01 14:35:39

gitjmeter脚本

2020-11-10 09:45:16

Git修改记录

2022-03-23 09:18:10

Git技巧Linux

2022-06-23 10:17:00

Git技术Linux

2018-04-08 11:10:45

2022-04-14 06:16:07

Gitbase开源

2022-03-18 09:45:43

Git分支Linux

2022-03-17 13:44:30

Git命令管理

2015-07-28 10:21:23

git命令

2022-05-11 09:50:02

GitLinux

2022-02-21 10:50:28

SvnGitHub分支

2022-02-10 09:56:33

2021-06-06 23:49:48

Git StashDrop代码

2021-01-04 13:25:10

Git开源工具

2022-04-27 09:12:17

Git代码

2021-02-08 12:59:12

Git 控制系统

2022-03-30 14:47:25

Gitpullpush

2020-08-20 07:41:52

Git原理版本

2022-02-21 09:44:45

Git开源分布式

同话题下的热门内容

手把手教你用装饰器扩展 Python 计时器哪个版本的JVM最快?无代码软件发展简史及未来趋势携程基于 GraphQL 的前端 BFF 服务开发实践为什么会存在 1px 问题?怎么解决?IOC-Golang 的 AOP 原理与应用Vue 里,多级菜单要如何设计才显得专业?远程医疗:优势、前景和现有IT解决方案

编辑推荐

太厉害了,终于有人能把TCP/IP协议讲的明明白白了!牛人5次面试腾讯不成功的经验HBase原理–所有Region切分的细节都在这里了Javascript如何监听页面刷新和关闭事件如何搭建一个HTTPS服务端
我收藏的内容
点赞
收藏

51CTO技术栈公众号