#yyds干货盘点#Git学习-存档区,Git中的一个隐藏区
Posted 汤圆学Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#Git学习-存档区,Git中的一个隐藏区相关的知识,希望对你有一定的参考价值。
前言
存档区顾名思义就是用来存档的;
git的存档有点像我们玩单机游戏时建档的过程,就是把当前的状态先都存下来,然后在另一个时间点捡起来继续执行;
目录
- 什么是存档区
- 为什么需要存档
- 存档的相关操作
- 存档的操作流程
正文
1. 什么是存档区
存档区属于git中的另一个区域,目前我们已知的git区域有:工作目录、暂存区、本地仓库、远程仓库;
但是现在又多了一个存档区,那它是干嘛的呢?
它是用来存储一些我们暂时还不想添加到git记录中的内容;
这里我们引用官方的一个图来看下,会比较清晰:
可以看到,存档库是在最左边,后面几个区域我们在实际工作中接触会比较多:
- 工作区:就是我们的本地目录
- 暂存区:暂存我们的修改记录,
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
: 清空所有存档(此操作不可恢复)
以上是关于#yyds干货盘点#Git学习-存档区,Git中的一个隐藏区的主要内容,如果未能解决你的问题,请参考以下文章