0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在 Git 中恢复隐藏的修改记录

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 14:09 次阅读

git stashgit 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 是如何工作的,以及当我们使用它时它是如何丢弃一个条目的。当我们知道一个被丢弃的条目的哈希值时,我们仍然可以使用它,以及如何找到提交的哈希值.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    13

    文章

    4213

    浏览量

    85554
  • 终端
    +关注

    关注

    1

    文章

    1105

    浏览量

    29797
  • Git
    Git
    +关注

    关注

    0

    文章

    196

    浏览量

    15715
收藏 人收藏

    评论

    相关推荐

    何在Linux设置Git

    在 Linux 设置 Git 十分简单,但为了获得完美的配置,我做了以下五件事。
    发表于 10-21 09:06 1178次阅读

    如何使用SSH签名Git提交记录

    Git 支持使用 GPG 来签名提交记录。但 GPG 用起来很复杂,一直赖得搞。
    发表于 06-16 16:21 525次阅读

    如何隐藏CAD图纸的部分图形对象?CAD局部隐藏

    ,如果想要查看隐藏的对象的话可以使用【恢复可见】命令恢复隐藏对象的显示。以上就是小编给大家整理介绍的浩辰CAD建筑软件CAD局部
    发表于 06-06 17:55

    CodeAurora GIT Repo无法使用,哪里可以修改git linux git

    :ls1046afrwy.config” 但它不适用于以下错误。(GIT 克隆) 所以,我检查了 GIT Repo“ 我认为 REPO 是不可用的。 我在哪里可以找到可用的 Linux GIT Repo。我想在 Flex
    发表于 04-25 08:36

    何在Project Explorer隐藏文件夹?

    何在 MCUXpresso 的项目资源管理器隐藏项目子目录?例如,我想隐藏我的[i]doc\\\\子目录,这可能吗?
    发表于 05-18 06:01

    Git如何克隆,修改,添加和删除文件的详细资料概述

    在 本系列的第一篇文章 开始使用 Git 时,我们创建了一个简单的 Git 仓库,并用我们的计算机连接到它,向其中添加一个文件。在本文中,我们将学习一些关于 Git 的其他内容,即如何克隆(下载)、
    的头像 发表于 06-10 09:06 4072次阅读
    在<b class='flag-5'>Git</b><b class='flag-5'>中</b>如何克隆,<b class='flag-5'>修改</b>,添加和删除文件的详细资料概述

    何在Linux查看隐藏文件

    在windows可以查看隐藏的文件。在Linux也可以查看隐藏文件且非常容易。要查看隐藏文件运行`ls -a`命令即可。
    的头像 发表于 01-04 17:31 1.6w次阅读

    如何快速批量修改Git提交记录的用户信息

    使用该脚本,替换其中 [Your Old Email] [Your New Author Name] [Your New Email] 之后在 git 目录执行即可。
    的头像 发表于 02-06 16:09 1994次阅读

    Git是什么

    Git是一个免费的、开源的分布式版本控制系统,可以用于记录一个或者若干个文件内容的变化,方便查阅或者修改
    的头像 发表于 02-10 11:23 862次阅读
    <b class='flag-5'>Git</b>是什么

    Git的基本概念,及基本框架、工作流程

    版本库/仓库(Repository /rɪˈpɑːzətɔːri/ 仓库)Git的管理仓库,管理版本的数据库,记录文件/目录状态的地方,所有内容的修改记录(版本)都在这里。就是工作区目录下的
    的头像 发表于 06-08 16:09 2715次阅读
    <b class='flag-5'>Git</b>的基本概念,及基本框架、工作流程

    git rebase和git merge的区别

    "origin"已经有了 2 个提交,如图。 现在我们在这个分支做一些修改,然后生成两个提交(commit)。   $ vi file.txt$ git commit$ vi otherfile.txt$ git commit.
    的头像 发表于 07-05 09:54 601次阅读
    <b class='flag-5'>git</b> rebase和<b class='flag-5'>git</b> merge的区别

    Git是什么 Git介绍

    git 是什么? Git 诞生于 2005 年,是一款免费、开源、分布式版本控制系统。 直接记录快照,而非差异比较 Git 和其它版本控制系统的主要差别在于
    的头像 发表于 07-22 10:50 1731次阅读
    <b class='flag-5'>Git</b>是什么 <b class='flag-5'>Git</b>介绍

    git如何记录每次更新到仓库

    记录每次更新到仓库 工作目录下的每一个文件都不外乎这两种状态:已跟踪 或 未跟踪。 已跟踪包括:已提交(committed)、已修改(modified) 和 已暂存(staged) 检查当前文件状态
    的头像 发表于 07-22 11:11 508次阅读
    <b class='flag-5'>git</b>如何<b class='flag-5'>记录</b>每次更新到仓库

    Git命令解决常见场景记录

    本文主要归纳一下git的学习记录,在开发期间发现了git在sourcetree的处理不是很好,对于多选文件的丢弃这点不是很方便,所以做一个记录,由于项目中有新建的文件,所以被识别为未跟
    的头像 发表于 12-20 09:44 401次阅读
    用<b class='flag-5'>Git</b>命令解决常见场景<b class='flag-5'>记录</b>

    克服PLC编程的难题—基于Git的软件

    Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发。
    的头像 发表于 01-22 09:30 902次阅读
    克服PLC编程的难题—基于<b class='flag-5'>Git</b>的软件