1、需求背景
有时候在开发过程中,在一个分支上(dev1)已经写了一部分代码,但是需要紧急切换到别的分支(dev2)上修改某个代码,这时候不能直接从dev1分支上切换到dev2分支上,提示你需要保存代码。此时dev1分支上的代码还没有写完,暂时还不能提交。但是想在不提交代码的情况下能够临时保存dev1分支上的代码,然后切换到dev2分支上。等dev2分支上处理完成后,再切换到dev1分支上可以继续工作。
2、git stash介绍
git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。通过git stash命令推送一个新的储藏,当前的工作目录就干净了。
stash是本地的,不会通过git push命令上传到git server上。
3、git stash常用命令
- git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
- git stash list :查看stash了哪些存储
- git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
- git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
- git stash apply : 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
- git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
- git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
- git stash clear :删除所有缓存的stash
使用 git stash apply 将之前隐藏的更改重新应用到工作副本,但是和 git stash pop 不同, 并不会将他们从stash中删除。
4、演示操作
当在dev_index分支上修改了一些代码,这时候需要切换到dev_app分支上:
此时可以使用git stash命令保存代码:
git stash save 'dev_index_001'
此时可以顺利的切换到dev_app分支:
待在dev_app分支处理完后,再次切换到dev_index分支:
此时再次使用git stash命令释放之前保存的代码:
git stash pop
注意:git stash在各个分支之间是通用的,不同分支缓存的代码可以保存到另外的分支上。
注意:git stash pop默认会恢复上一个,即第一个stash@{0}缓存的内容。建议使用git stash pop之前先使用一下git stash list查看一下,然后使用git stash pop stash@{x}。