git Stash详细介绍:git stash和git pop的详细用法
git Stash详细介绍:git stash和git pop的详细用法
一、背景 ----
我们经常会遇到这样的情况:
在开发过程中,在一个分支开发新的功能,还没开发完毕,做到一半时有反馈需要处理紧急bug,但是新功能开发了一半又不想提交。
分支有改变时不提交又不能切换分支,如下:
这时就可以使用 git stash ,stash 就是为此而生的!
二、使用
2.1 使用之前,先简单了解下 git stash 干了什么:
它会保存当前工作进度,会把暂存区和工作区的改动保存到一个未完结变更的堆栈中;执行完这个命令后,在运行 git status
命令,就会发现当前是一个干净的工作区,没有任何改动。
git stash
是本地的,不会上传到服务器上;- 可以通过使用
git stash save 'message...'
可以添加一些注释。
2.2 git stash 相关命令
命令名 | 作用 |
---|---|
git stash | 隐藏当前的工作现场, 此时, git status的结果是 clean |
git stash list | 查看所有隐藏, 每一行的冒号前面的字符串就是标识此隐藏的id |
git stash apply | 重新显示标识为 id 的隐藏 |
git stash drop | git apply恢复隐藏后, 需要手动删除 list 列表中的记录 |
git stash pop | 恢复最新的进度到工作区 |
git stash pop stash@[stash_id] | 恢复指定的进度到工作区 |
2.3 使用流程
一般先使用 git stash list 查看有没有已经 stash 的记录,避免和自己的混淆,到时候使用时不知道是哪条记录
查看有无用的 list,可以先使用 git stash drop n 删除,直到 list 为空
- 执行
git stash
默认是不带注释的,想要后面看的更清楚该 stash 是存储的什么,可以如下操作:
执行 git stash save "commend"
- 查看刚才保存的工作进度
git stash list
保存注释的长这样:
可以看到 stash@{0} 是刚才保存的
- 这时候在看分支已经是干净无修改的(改动都有暂存到 stash)
- 现在就可以正常切换到目标分支,进行相应操作
- 其他分支处理完成,再切回来使用刚才的 stash, 还是先查看 暂缓列表
- 选择使用暂缓
git stash apply **n**
这时就看到刚才保存的工作进度,已经原样恢复~大功告成!
继续开发。。。
先来思考一下,为什么会使用 stash 命令?
在项目开发中,基本都会遇到这样的情况:本来你在自己的分支上愉快的开发功能A,但是突然加了一个优先级很高的需求B或者有bug需要先修复掉。但这个时候,你新做的功能A刚开发到一半,总不能先提交A再开发B,或者直接拉个新分支切过去吧?(可以倒是可以,但是不推荐)
git stash在暂存区:存取、删除
截图部分(方便查看)
内容部分(方便复制命令)
暂存区:存取、删除 | |||
命令 | 说明 | ||
git add.、git stash | 提交到暂存区 | ||
git stash | 暂存工作区修改的内容:保存到暂存区(可以提N次) | ||
git stash pop | 恢复暂存的工作区内容:从暂存区取出(最近一次) | ||
git stash list | 查询工作区所有stash的列表 | ||
git stash apply stash@{2} | 查询后,恢复第二次提交的 | ||
git stash clear | 清空暂存区的所有stash |