JustYeh的前端博客

git stash的使用

2019-09-29

git

应用场景

场景一:你现在正在dev开发一个新功能,代码写了很多,突然测试找到你,说线上的代码出现问题了,需要你紧急修复。这时就有一个问题摆在你面前了,新写的代码怎么处理?丢掉当然是不现实的,但是直接提交的话,首先功能没写完直接push会给其他开发人员造成“困扰”,再者本次提交还会污染现有的commit信息,造成杂乱的时间线。这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。

场景二:还是开发新功能,写了半天突然发现自己是在master上操作的,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。

总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。

git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中.

常用git stash命令

暂存当前代码

git stash                                          // 直接将代码保存到stash中
git stash push -m "message"       // 保存到stash的同时,加解释
git stash save "message"             // 同上

git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。另外,stash是本地的,不会通过git push命令上传到git server上。

当前网络大多使用git stash save为例暂存当前代码,但是此命令已经不再推荐使用,当前推荐使用git stash push命令。

查看所有的stash

git stash list

取回stash的代码

git stash pop               // 删除stash的最后一次的存储,并放回工作区
git stash pop stash@{1}     // 删除stash的指定的存储,并放回工作区
git stash apply             // 取出stash的最后一次的存储,放回工作区,但是stash空间还在
git stash apply stash@{1}   // 取出stash的指定的存储,放回工作区,但是stash空间还在

git stash pop会删除stash的最后一次的存储,相当于执行了git stash applygit stash drop stash@{0}两个操作

git stash apply默认会取出最后一次的stash,相当于git stash apply stash@{0}

删除stash

git stash drop stash@{id}       // 从堆栈中移除某个指定的stash
git stash clear                 // 清空堆栈中所有的stash

查看指定stash的diff

git stash show      //查看堆栈中最新保存的stash和当前目录的差异
git stash show -p   //作用同上,并展示差异细节

参考链接

https://www.cnblogs.com/tocy/p/git-stash-reference.html

https://blog.csdn.net/stone_yw/article/details/80795669