网站首页 > 精选文章 正文
像 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 ..." to update what will be committed)
(use "git restore ..." 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 ..." to update what will be committed)
(use "git restore ..." 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 ..." to update what will be committed)
(use "git restore ..." 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 是如何工作的,以及当我们使用它时它是如何丢弃一个条目的。当我们知道一个被丢弃的条目的哈希值时,我们仍然可以使用它,以及如何找到提交的哈希值.
- 上一篇: git stash的那些事儿
- 下一篇: OneForAll - 功能强大的子域收集工具
猜你喜欢
- 2025-03-06 Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- 2025-03-06 开酒庆祝!“TGIT”发布回归宣传片
- 2025-03-06 Cursor使用指南:释放AI编程的无限潜能
- 2025-03-06 如何在github建一个自己的博客和git本地常规操作?
- 2025-03-06 1小时打造HaaS版小小蛮驴智能车
- 2025-03-06 Git工作量统计
- 2025-03-06 Git常用指令
- 2025-03-06 利用 GitLab CI 同步组织内的各项目的代码
- 2025-03-06 在树莓派 上安装设置 Kodi 媒体播放器
- 2025-03-06 arm64极速编译bpftrace
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)