侧边栏壁纸
  • 累计撰写 79 篇文章
  • 累计创建 84 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录
Git

Git学习-存档区,Git中的一个隐藏区

汤圆学Java
2022-01-26 / 0 评论 / 0 点赞 / 98 阅读 / 3,734 字
温馨提示:
本文最后更新于 2022-01-26,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

存档区顾名思义就是用来存档的;

git的存档有点像我们玩单机游戏时建档的过程,就是把当前的状态先都存下来,然后在另一个时间点捡起来继续执行;

目录

  1. 什么是存档区
  2. 为什么需要存档
  3. 存档的相关操作
  4. 存档的操作流程

正文

1. 什么是存档区

存档区属于git中的另一个区域,目前我们已知的git区域有:工作目录、暂存区、本地仓库、远程仓库;

但是现在又多了一个存档区,那它是干嘛的呢?

它是用来存储一些我们暂时还不想添加到git记录中的内容;

这里我们引用官方的一个图来看下,会比较清晰:

image-20220126102349180

可以看到,存档库是在最左边,后面几个区域我们在实际工作中接触会比较多:

  • 工作区:就是我们的本地目录
  • 暂存区:暂存我们的修改记录,git add就是将修改记录添加到暂存区
  • 本地版本库:正式存储我们的修改记录,git commit就是将修改记录添加到本地版本库
  • 上游版本库:远程存储我们的修改记录,git push就是将修改记录添加到上游版本库
  • 存档库:也是用来存储我们的修改记录;可以把它当做一个储藏室,暂时存储修改,等到需要的时候再恢复到本地工作区

2. 为什么需要存档

主要为了让代码不那么混乱;

比如我们现在正在开发一个新功能,但是开发到一半,领导要停下来,去更新一个旧功能;

如果我们直接把现有代码提交,会显得很乱,因为开发不完整,提交的记录会显得多而杂;

这时就可以用存档命令,先把当前的代码进行存档,然后切换到旧功能进行开发;

等到旧的功能更新完成,再切换回来,恢复存档的记录,继续新功能的开发;

这里的存档命令就是 git stash,也有隐藏的意思,就是暂时不可见(相对于本地工作区来说,暂时不可见);

3. 存档的相关操作

在开始介绍存档的操作流程之前,先看下几个常用的stash命令:

git stash push -m "存档":将本地修改存档到存档库,并清空本地工作区的修改;-m选项用来添加备注;

git stash pop:将存档库最新的存档,提取到本地工作空间,同时从存档库中删除

git stash apply: 将存档库最新的存档,提取到本地工作空间,同时保留在存档库中(不同于上面的pop)

git stash list: 列出所有的存档

git stash show: 显示最新的存档

git stash drop: 删除最新的存档(可恢复,恢复过程参考:Git学习-存档记录被误删的恢复办法 (javalover.cc))

git stash clear: 清空所有存档**(此操作不可恢复)**

4. 存档的操作流程

下面我们来演示下存档的操作流程,包括存档、查看、恢复等;

1. 修改文件:

假设当前的git项目有一个a.txt文件,我们先修改这个文件:

$ vim a.txt

然后查看改动:git status

$ git status
On branch 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:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")
2. 存档:

接下来我们进行存档操作,将现有的改动记录隐藏起来:git stash push -m "",这个命令类似commit,都可以加笨猪

$ git stash push -m "隐藏 a.txt的更新记录"
Saved working directory and index state On master: 隐藏 a.txt的更新记录

存档后,本地工作区的修改记录会被清空

这时我们再查看本地的修改记录,会发现为空:

$ git status
On branch master
nothing to commit, working tree clean

不过我们可以在存档区查看刚才被清空的修改记录:git stash list

$ git stash list
stash@{0}: On master: 隐藏 a.txt的更新记录
3. 恢复:

接下来我们对刚才存档的内容进行恢复git stash apply

$ git stash apply
On branch 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:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")
  • 这里我们也可以指定stash的对象,比如git stash apply stash@{0},默认恢复的是最近的一次存档记录;

  • 恢复之后会直接显示git status的记录

上面的git stash apply进行恢复操作后,存档区的记录还存在;

如果想恢复并清空存档区的记录,则可以用git stash pop命令:

$ git stash pop
On branch 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:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (0e70ffaf6d95dbdb3d24941f2c2adadc09f56432)
  • 可以看到,最后一行打印了一条记录,提示丢弃了存档区的存档记录
4. 清空:

有时我们不想把存档区的记录恢复到工作区,只是单纯地想删除(类似回收站的清空),这时就可以用git stash drop或者git stash clear命令;

前者是可恢复的,后者是不可恢复的;

恢复教程可以参考这篇:Git学习-存档记录被误删的恢复办法 (javalover.cc)

总结

本篇介绍了存档区的作用,虽然不是很常用,但是在相关遇到问题时(比如上面的新旧功能开发),它会是一个比较好的解决思路;

当然我们也可以把存档区理解成一个回收站,他们的作用其实还是有点相似的:存储、恢复、彻底清空

最后再罗列下存档的相关命令:

git stash push -m "存档":将本地修改存档到存档库,并清空本地工作区的修改;

git stash pop:将存档库最新的存档,提取到本地工作空间,同时从存档库中删除

git stash apply: 将存档库最新的存档,提取到本地工作空间,同时保留在存档库中(不同于上面的pop)

git stash list: 列出所有的存档

git stash show: 显示最新的存档

git stash drop: 删除最新的存档(可恢复)

git stash clear: 清空所有存档**(此操作不可恢复)**

0

评论区