stash
在英文意思是隐藏。git stash
的作用也是隐藏没完成的代码,防止它干扰别人或者新分支的工作。
一、背景
1.1 我们经常会遇到这样的情况
这时就可以使用 git stash
命令先把当前进度保存起来,然后切换到另一个分支去修改bug
;修改完提交后,再切回 dev
分支,使用git stash pop
来恢复之前的进度继续开发新功能。
看到这里,有些小伙伴就有疑问:没必要啊,修 BUG
的时候,直接切换分支,修改完提交后再切回来到原来的分支不就行了。
1.2 真的要这么麻烦吗?
- 比如有情景如下:
- 在
dev
分支下创建一个文件dev_file.txt
,并add
,让它stage
; - 这时切到
master
分支,你会看到这个dev_file.txt
居然也在master
分支里。他不是应该只在dev
分支吗?
- 如果你试试你再试试:
- 切回
dev
分支,执行git stash
; - 这时你在切回
master
分支,dev_file.txt
就消失了。
这时候,我不禁想说:git stash,YYDS !
二、git stash
当你执行 git stash
时会提醒你:
Saved working directory and index state WIP on newF2: b63fbcb add dev_file.txt
HEAD is now at b63fbcb add dev_file.txt。
它已经把 dev_file.txt
保存好了。
2.1 git stash 干了什么
它会保存当前工作进度,会把暂存区和工作区的改动保存到一个未完结变更的堆栈中;执行完这个命令后,在运行git status
命令,就会发现当前是一个干净的工作区,没有任何改动。
2.2 git stash 相关命令
三、git stash 使用场景
3.1 有人与我改动同一分支
此时,就可以用 git stash
来处理
// 把本地的改动暂存起来
git stash
// 拉取远程分支(此时本地分支会回滚到上次commit的情况,你的改动都存在stash中)
git pull
// 将stash中改动重新加回本地分支,就可以继续修改了,当然,如果改好了就是add,commit,push
git stash pop
3.2 不小心改动了其他分支
// 把本地当前改动暂存起来,此时master分支就恢复到了上次拉取时的状态
git stash
// 切换到需要改动的分支
git checkout test
// 将改动pop到自己当前的分支
git stash pop
四、小结
就我个人使用而言,git stash pop
就已经满足日常需要了,毕竟频繁的线上 bug
或者忘记切代码啥的,我们应该考虑的不是这个命令的问题,是开发质量的范畴了。