Git 储藏(stash)详解
文章目录
- 单次储藏及应用
- 多次储藏及应用
- 对特定范围文件进行储藏
此文在阅读前需要有一定的git命令基础,若基础尚未掌握,建议先阅读这篇文章Git命令播报详版
在平常的工作中,当我们在单独拉取的功能分支中进行开发时,遇到线上出现bug需要进行紧急修复,我们需要切换到主分支,进行代码的修复。但是我们直接在本地切换到主分支,则会提示当前文件的改动会丢失。
那该怎么办呢?合理的方式应该是将功能分支的代码临时存储在某个位置,当我们切回到当前分支,读取该存储,将之前的改动恢复。
在git中,就有git stash
这样的命令,完美的解决了这个问题,其将当前未提交的修改(即工作区和暂存区的修改)先暂时储藏起来。
然后我们可以通过git stash list
来查看储藏记录。之后通过git stash pop
命令将之前最近一次储藏的修改取出来,继续之前的工作,并同时将该储藏从储藏记录列表中删除
单次储藏及应用
我们在当前分支,添加test.md文件。
查看文件状态
git status输出:
On branch master
Your branch is up to date with 'origin/master'.Untracked files:(use "git add <file>..." to include in what will be committed)test.mdnothing added to commit but untracked files present (use "git add" to track)
添加test.md到储藏区,使之能被git进行追踪
git add test.md
查看文件状态
git status输出:
On branch master
Your branch is up to date with 'origin/master'. Changes to be committed:(use "git restore --staged <file>..." to unstage)new file: test.md
进行储藏
git stash输出:Saved working directory and index state WIP on master: 709627d Initial commit
查看储藏
git stash list输出:stash@{0}: WIP on master: 709627d Initial commit
应用最近一次储藏
git stash pop输出:On branch master
Your branch is up to date with 'origin/master'.Changes to be committed:(use "git restore --staged <file>..." to unstage)new file: test.mdDropped refs/stash@{0} (05edd0c153191fe70ef42b9e4fdf70622d0e6831)
查看储藏
git stash list输出为空,没有储藏记录
多次储藏及应用
多次储藏会发生什么呢?
修改文件,进行储藏,重复这一步骤,再通过git stash list
来查看这两次记录
git stash list输出:
stash@{0}: WIP on master: 709627d Initial commit
stash@{1}: WIP on master: 709627d Initial commit
从上图结果中,我们发现两次储藏记录的标识信息完全一致,只有其前面的index
有别。
git默认按如下规则标识储藏记录(WIP意为work in progess, index
用于后面取出所对应储藏的修改)。
stash@{index}: WIP on [分支名]: [最近一次的commitID] [最近一次的提交信息]
由于我们在功能分支下的两次储藏中均未发生提交,所以其提交ID是一致的。
这样明显会带来问题,我们在多个储藏之间,无法明确需要应用哪个,需要标识下储藏记录。
可以通过命令git stash -m [stashMessage]
来标记此次储藏,以便后期查看。
通过查看储藏列表的index
的可以取出指定储藏中的修改到工作区
取出指定index
的储藏的修改到工作区中 git stash apply index
将指定index
的储藏从储藏记录列表中删除 git stash drop index
储藏记录多的话,一个个删除太麻烦,可以进行批量删除 git stash clear
修改文件,进行储藏
git stash -m "change1" 输出:Saved working directory and index state On master: change1
再次修改文件,进行储藏
git stash -m "change2" 输出:Saved working directory and index state On master: change2
查看储藏
git stash list输出:
stash@{0}: On master: change2
stash@{1}: On master: change1
应用储藏,提交信息为"change1"
git stash apply 1输出:
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.mdno changes added to commit (use "git add" and/or "git commit -a")
查看储藏
git stash list输出:
stash@{0}: On master: change2
stash@{1}: On master: change1
删除刚才应用的储藏
git stash drop 1输出:Dropped refs/stash@{1} (9a6ae2acf53198fce4125161d28045c484f1b20b)
查看储藏
git stash list输出:stash@{0}: On master: change2
再添加储藏
git stash -m "add新change" 输出:Saved working directory and index state On master: add新change
查看储藏
git stash list输出:
stash@{0}: On master: add新change
stash@{1}: On master: change2
删除所有储藏
git stash clear
查看储藏
git stash list
输出为空,代表已经完全清除
当删除index
为0项,index
为1项中的index
会变为0。即index
会动态从0开始排序的,可看如下示例。
git stash list输出:
stash@{0}: On master: change2
stash@{1}: On master: change1git stash drop 0
输出:Dropped refs/stash@{0} (fb3d70dea8b439cd09cce774cf622638a341af9c)git stash list
输出:stash@{0}: On master: change1
对特定范围文件进行储藏
默认情况下,只要在git追踪范围的文件,均可以进行储藏。我们可以进一步区分特定范围的文件进行储藏。
git stash [-u|--include-untracked]
:对未追踪文件也进行储藏git stash [-S|--staged]
: 只对暂存区文件进行储藏git stash [-a|--all]
: 对所有文件进行储藏
提前准备好三种git状态不同的文件。新添加的文件(即为未追踪文件),工作区修改的文件,提交到暂存区的文件
git status输出:
git status
On branch master
Your branch is up to date with 'origin/master'. Changes to be committed:(use "git restore --staged <file>..." to unstage)modified: README.md 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.en.mdUntracked files:(use "git add <file>..." to include in what will be committed)test.md
对未追踪文件也进行储藏
git stash -u输出:Saved working directory and index state WIP on master: 709627d Initial commit
查看文件状态
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.en.mdmodified: README.md Untracked files:(use "git add <file>..." to include in what will be committed)test.mdno changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (23b4e04af9cc34612f458648e838f552a1f99169)
将README.md添加到暂存区
git add README.md
查看文件状态
git status输出:
On branch master
Your branch is up to date with 'origin/master'. Changes to be committed:(use "git restore --staged <file>..." to unstage)modified: README.md 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.en.mdUntracked files:(use "git add <file>..." to include in what will be committed)test.md
只对暂存区文件进行储藏
git stash -S
输出:Saved working directory and index state WIP on master: 709627d Initial commit
查看文件状态
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.en.mdUntracked files:(use "git add <file>..." to include in what will be committed)test.mdno changes added to commit (use "git add" and/or "git commit -a")
重复之前步骤。将储藏进行应用,同时将README.md添加到暂存区
全部文件添加到储藏区
git stash -a
输出:Saved working directory and index state WIP on master: 709627d Initial commit
查看文件状态
git status输出:
On branch master
Your branch is up to date with 'origin/master'.nothing to commit, working tree clean
若想对stash
命令了解更多,可以通过命令git stash --help
查阅。
Git 储藏(stash)详解相关推荐
- Git 常用命令详解
Git 常用命令详解 1. Git 常用命令 1.1 常用git 命令图表汇总 1.2 配置个人信息 1.3 创建版本库 1.4 常用Git命令汇总 2. Git 解决代码冲突 3. Git 分支管理 ...
- Git客户端图文详解如何安装配置GitHub操作流程攻略
Git客户端图文详解如何安装配置GitHub操作流程攻略 软件应用 爱分享 3个月前 (08-15) 8896浏览 0评论 Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来 ...
- git checkout 命令详解—— Git 学习笔记 16
git checkout 命令详解 概览 git checkout 这条命令的常用格式如下: 用法一 git checkout [<commit>] [--] <paths> ...
- git reset 命令详解(二)—— Git 学习笔记 08
git reset 命令详解(二) 上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法--后面跟一个路径(或文 ...
- git reset 命令详解(一)—— Git 学习笔记 07
git reset 命令详解(一) 简而言之,git reset 命令是用来将当前 branch 重置到另外一个 commit 的,这个动作可能同时影响到 index 以及 work director ...
- git diff命令详解
git diff命令详解 diff里面a表示前面那个变量,b表示第二个变量 HEAD commit版本 Index staged版本 a.查看尚未暂存的文件更新了哪些部分,不加参数直接 ...
- Git的原理详解与使用-臧雪园-专题视频课程
Git的原理详解与使用-3人已学习 课程介绍 2018 Git的原理详解与使用视频教程,该课程主要从四个部分进行讲解:第一部分主要讲解了Git的基本使用.比如安装和git基本命令使用, ...
- git log 命令详解
git log 命令详解 git log 命令用于查看提交历史: git log [options] [<file> <commit> <tag>...] 如果不加 ...
- 运维之道 | Git log 命令详解
Git log 命令详解 Git log 可以让我们查看提交commit history [root@localhost villian]# git log commit 7a690b414f87fb ...
最新文章
- 05章项目:我的租房网
- mybatis jdbctype数据类型_mybaits-mybatis配置
- python对Excel数据进行读写操作
- 免费开源B2C电商系统:(ShopXO无需授权,即可商用)- 入门篇
- UVA10602 Editor Nottoobad【贪心】
- Win7下建立Wifi热点
- 企业级代码静态测试工具Helix QAC——支持编码规范
- 8086/8088CPU内部结构
- 高通功耗调试17之TLOC DEAMON导致待机/亮屏电流异常问题
- 择一城终老,遇一人白首
- 2022年天津专升本报考专业对口限制目录,升本专业课如何备考~
- 晶振旁的电阻(并联与串联)和电容的作用
- Lodop打印较大的超出纸张的图片
- tensorflow输出的人脸图片经过OpenCV write的图片是蓝色的问题的解决方案
- c语言画板,简单的像素画板(C语言编写)
- python背景图颜色_更改特定子图背景颜色(饼图外部)
- 数控计算机实习小结,数控机床实习心得体会
- 大气校正6S与FLAASH计算与对比
- 如何解决error: failed to push some refs to ‘git@github.com:......git pull冲突问题
- MTK 平台获取IMSI号码 以及如何截获系统中的各种消息
热门文章
- SM2算法功能简述(一)
- 白加黑加载方式_利用白加黑原理 绕过杀软主动防御
- java中%3e%3e是什么_python中%3e是什么意思
- C语言:输入两个数字,将其按从小到大输出!
- Java字节码框架ASM简介
- processing创意图形代码_Processing练习-Self Sketch - TAI CHI
- 什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?
- sprintboot 微信静默授权代码
- 小程序集成网易云通信群聊功能Demo发布
- nova service的heatbeat机制