文章目录

  • 单次储藏及应用
  • 多次储藏及应用
  • 对特定范围文件进行储藏

此文在阅读前需要有一定的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)详解相关推荐

  1. Git 常用命令详解

    Git 常用命令详解 1. Git 常用命令 1.1 常用git 命令图表汇总 1.2 配置个人信息 1.3 创建版本库 1.4 常用Git命令汇总 2. Git 解决代码冲突 3. Git 分支管理 ...

  2. Git客户端图文详解如何安装配置GitHub操作流程攻略

    Git客户端图文详解如何安装配置GitHub操作流程攻略 软件应用 爱分享  3个月前 (08-15)  8896浏览  0评论 Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来 ...

  3. git checkout 命令详解—— Git 学习笔记 16

    git checkout 命令详解 概览 git checkout 这条命令的常用格式如下: 用法一 git checkout [<commit>] [--] <paths> ...

  4. git reset 命令详解(二)—— Git 学习笔记 08

    git reset 命令详解(二) 上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法--后面跟一个路径(或文 ...

  5. git reset 命令详解(一)—— Git 学习笔记 07

    git reset 命令详解(一) 简而言之,git reset 命令是用来将当前 branch 重置到另外一个 commit 的,这个动作可能同时影响到 index 以及 work director ...

  6. git diff命令详解

    git diff命令详解 diff里面a表示前面那个变量,b表示第二个变量 HEAD     commit版本 Index     staged版本 a.查看尚未暂存的文件更新了哪些部分,不加参数直接 ...

  7. Git的原理详解与使用-臧雪园-专题视频课程

    Git的原理详解与使用-3人已学习 课程介绍         2018 Git的原理详解与使用视频教程,该课程主要从四个部分进行讲解:第一部分主要讲解了Git的基本使用.比如安装和git基本命令使用, ...

  8. git log 命令详解

    git log 命令详解 git log 命令用于查看提交历史: git log [options] [<file> <commit> <tag>...] 如果不加 ...

  9. 运维之道 | Git log 命令详解

    Git log 命令详解 Git log 可以让我们查看提交commit history [root@localhost villian]# git log commit 7a690b414f87fb ...

最新文章

  1. 05章项目:我的租房网
  2. mybatis jdbctype数据类型_mybaits-mybatis配置
  3. python对Excel数据进行读写操作
  4. 免费开源B2C电商系统:(ShopXO无需授权,即可商用)- 入门篇
  5. UVA10602 Editor Nottoobad【贪心】
  6. Win7下建立Wifi热点
  7. 企业级代码静态测试工具Helix QAC——支持编码规范
  8. 8086/8088CPU内部结构
  9. 高通功耗调试17之TLOC DEAMON导致待机/亮屏电流异常问题
  10. 择一城终老,遇一人白首
  11. 2022年天津专升本报考专业对口限制目录,升本专业课如何备考~
  12. 晶振旁的电阻(并联与串联)和电容的作用
  13. Lodop打印较大的超出纸张的图片
  14. tensorflow输出的人脸图片经过OpenCV write的图片是蓝色的问题的解决方案
  15. c语言画板,简单的像素画板(C语言编写)
  16. python背景图颜色_更改特定子图背景颜色(饼图外部)
  17. 数控计算机实习小结,数控机床实习心得体会
  18. 大气校正6S与FLAASH计算与对比
  19. 如何解决error: failed to push some refs to ‘git@github.com:......git pull冲突问题
  20. MTK 平台获取IMSI号码 以及如何截获系统中的各种消息

热门文章

  1. SM2算法功能简述(一)
  2. 白加黑加载方式_利用白加黑原理 绕过杀软主动防御
  3. java中%3e%3e是什么_python中%3e是什么意思
  4. C语言:输入两个数字,将其按从小到大输出!
  5. Java字节码框架ASM简介
  6. processing创意图形代码_Processing练习-Self Sketch - TAI CHI
  7. 什么是宏任务、微任务?宏任务、微任务有哪些?又是怎么执行的?
  8. sprintboot 微信静默授权代码
  9. 小程序集成网易云通信群聊功能Demo发布
  10. nova service的heatbeat机制