git stash(储藏)的用法总结


Posted in Servers onJune 25, 2022

当在一个分支的开发工作未完成,却又要切换到另外一个分支进行开发的时候,除了commit原分支的代码改动的方法外,我觉得git stash是一个更加便捷的选择。 

git stash(git储藏)可用于以下情形:

  • 发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交。这时就可以考虑git stash。
  • 使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply将以前一半的工作应用回来。

  • 经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。

 步骤如下:

  • 添加改动到stash。在原分支 git stash save -a "messeag",网上很多很多资料都没有加 -a 这个option选项,我想他们的代码开发可能都是在原代码上进行修改吧。而对于在项目里加入了代码新文件的开发来说,-a选项才会将新加入的代码文件同时放入暂存区。
  • 恢复改动。如果你要恢复的是最近的一次改动,git stash pop 即可,我用这个用的最多。如果有多次stash操作,那就通过git stash list查看stash列表,从中选择你想要pop的stash,运行命令git stash pop stash@{id}或者 git stash apply stash@{id}即可。这方面网上的资料挺多的。

  • 删除stashgit stash drop <stash@{id}> 如果不加stash编号,默认的就是删除最新的,也就是编号为0的那个,加编号就是删除指定编号的stash。git stash clear 是清除所有stash,整个世界一下子清净了!

  • git stash pop 与 git stash apply <stash@{id}> 的区别。

    当我使用git stash pop 和 git stash apply 几次以后,我发现stash list 好像比我预计的多了几个stash。于是我便上网去了解了一下这两个命令的区别。原来git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除,而 git stash apply stash@{id} 命令则会继续保存stash id。对于有点强迫症的我来说,是容不下越来越多的陈旧stash id 仍然存在的,所以我更习惯于用git stash pop 命令。

 git stash 使用实例 :

生成测试环境

// 初始化仓库,进行一次提交
# git init stash-test
# cd stash-test && echo 'hello'> readme
# git add . && git commit -m "init"
 
// 修改工作区和暂存区
# echo 'need to be stashed' >> readme
# git add readme
 
// 查看此时工作区和版本库区别
# git diff HEAD
diff --git a/readme b/readme
index ce01362..55d6c28 100644
--- a/readme
+++ b/readme
@@ -1 +1,2 @@
 hello
+need to be stashed

执行stash及恢复

// 暂存当前状态
# git stash
  
// 查看当前工作区和版本库区别
# git diff HEAD
==> 此时什么都没有输出,说明工作区被重置为HEAD指向内容了
  
// 显示已暂存列表
# git stash list
stash@{0}: WIP on master: 440e976 init
  
// 恢复暂存区和工作区进度
# git stash pop --index stash@{0}
  
// 查看工作区和版本库区别
# git diff HEAD
diff --git a/readme b/readme
index ce01362..55d6c28 100644
--- a/readme
+++ b/readme
@@ -1 +1,2 @@
 hello

命令详解:

git stash  对当前的暂存区和工作区状态进行保存。 
git stash list  列出所有保存的进度列表。 
git stash pop [--index] [<stash>] 恢复工作进度

到此这篇关于git stash(储藏)的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。


Tags in this post...

Servers 相关文章推荐
Nginx解决403 forbidden的完整步骤
Apr 01 Servers
教你快速构建一个基于nginx的web集群项目
Nov 27 Servers
nginx容器方式反向代理实战
Apr 18 Servers
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
Apr 29 Servers
nginx实现多geoserver服务的负载均衡
May 15 Servers
基于docker安装zabbix的详细教程
Jun 05 Servers
Ubuntu安装Mysql+启用远程连接的完整过程
Jun 21 Servers
Linux中各个目录的作用与内容
Jun 28 Servers
Nginx代理Redis哨兵主从配置的实现
Jul 15 Servers
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
Jul 15 Servers
zabbix如何添加监控主机和自定义监控项
Aug 14 Servers
ubuntu端向日葵键盘输入卡顿问题及解决
Dec 24 Servers
git中cherry-pick命令的使用教程
Jun 25 #Servers
解决Git推送错误non-fast-forward的方法
Jun 25 #Servers
Win2008系统搭建DHCP服务器
windows server2008 开启端口的实现方法
Windows10安装Apache2.4的方法步骤
Linux下搭建SFTP服务器的命令详解
Jun 25 #Servers
Nginx安装配置详解
You might like
php时间不正确的解决方法
2008/04/09 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
PHP中常用的魔术方法
2017/04/28 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
python制作抖音代码舞
2019/04/07 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
详解如何解决使用JSON.stringify时遇到的循环引用问题
2021/03/23 Javascript
创意广告词
2014/03/17 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
mysql中DCL常用的用户和权限控制
2022/03/31 MySQL
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js