一、背景
我们经常会遇到这样的情况:
在一个分支开发新功能,还没开发完毕,做到一半时有反馈紧急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 为空
1. 执行 `git stash`
默认是不带注释的,想要后面看的更清楚该 stash 是存储的什么,可以如下操作:
执行 `git stash save "commend"`
2. 查看刚才保存的工作进度 `git stash list`
保存注释的长这样:
可以看到 stash@{0} 是刚才保存的
3. 这时候在看分支已经是干净无修改的(改动都有暂存到 stash)
4. 现在就可以正常切换到目标分支,进行相应操作
5. 其他分支处理完成,再切回来使用刚才的 stash, 还是先查看 暂缓列表
6. 选择使用暂缓 `git stash apply n`
注:n 是序号,如下图红色箭头指示
这时就看到刚才保存的工作进度,已经原样恢复~大功告成!
继续开发。。。
三、小结
这个相对简单,就是学会使用就 ok, 这里就不再啰嗦总结了