一、前言
在使用Git过程中,有时当你在项目的其它分支正在进行开发,并且该分支还尚未开发完成进行提交,这个时候需要你切换分支进行工作,这个时候做到一半的工作既不想全部丢掉又不想到处都是问题的就commit,十分冲突。解决问题的方法就是 git stash 命令 贮藏(stash)会处理工作目录的脏的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一 个栈上, 而你可以在任何时候重新应用这些改动(甚至在不同的分支上)。 如果你的文件是新建文件且没有被跟踪,这个时候stash 命令是不会生效的。
二、git stash命令演示
1、现有分支如下,stashtest分支为目前正在开发的分支,test分支为我们需要切换的分支。  2、修改test.txt 文件内容,在文件中添加内容作为我们正在开发的功能,此功能未开发完成,这个时候需要切换到test分支进行修改可以使用如下命令进行贮藏(stash)
git stash save “贮藏的信息”
  3、当我们的工作区没有改动以后就可以放心的切换到其它分支进行开发,当开发完成后在切换回stashtest分支,将贮藏的内容从栈中弹出,继续未完成的工作内容。命令:
git stash pop stash@{序号}
 4、查看贮藏列表,贮藏与分支无关,可以将在僧ashtest分支上的贮藏在test分支弹出,命令:
git stash list
 5、在stashtest分支添加一个新文件stash.txt,如果不执行git add . 将新增文件添加追踪的话,git stash 是无法对其生效的  6、追踪将新增加的文件,并将其贮藏  7、查看stash 中的改动,如果不指定序号,默认为第一次贮藏的改动内容。命令:
git stash show stash@{序号} -p
 8、当我们不想弹出贮藏List中最近一次的改动时,可以按序号弹出贮藏,命令:
git stash pop stash@{序号}
 9、通过 git stash pop 命令我们可以看到当弹出序号为1的贮藏以后,贮藏列表中同时已经删除了对应的贮藏,如果有需要的话,可以使用 git stash apply 命令当弹出变更,但是贮藏列表中不删除弹出的该贮藏变更,命令:
git stash apply stash@{序号}
 10、当我们不想要某个贮藏,可以使用删除命令,命令:
git stash drop stash@{需要}
 11、清空贮藏列表,命令:
git stash clear

三、git stash命令总结
(1)git stash save “贮藏的信息” 存贮被追踪的改动
(2)git stash list 显示贮藏列表
(3)git stash show stash@{序号} -p 显示某个贮藏的变动
(4)git stash pop stash@{序号} 弹出某个贮藏,并在贮藏列表中删除该贮藏
(5)git stash apply stash@{序号} 弹出某个贮藏,但不在贮藏列表中删除
(6)git stash drop stash@{需要} 删除贮藏
(7)git stash clear 清空所有贮藏
|