180608-Git工具之Stash
git stash 暂存
背景:
实际开发过程中,经常可能遇到的一个问题,当你在dev分支上正开发得happy的时候;突然来了个线上bug,得赶紧从release分支上切一个bugfix分支来解决线上问题,这个时候,正在开发的东西,就得暂存了
之前对于Git只是简单的了解了下,只处于入门的会用级别,遇到上面这个问题,采取的是一个比较笨的方案:
# 1. 将当前改动保存,并提交一个tmp commit
git add .
git commit -m 'tmp save'## 注意上面只是提交到本地,没有推送到远端仓库# 2. 开始bugfix## 然后切换到release 分支,并获取最新代码
git checkout release
git pull origin release## 新建bugfix分支
git checkout -b bugfix
... # 开始干活# 3. 回到原来分支,继续干活
git checkout dev
git log
git reset --soft commit号
复制代码
虽然上面这样也可以曲线救国,但是在了解到Git stash之后,就简单多了,不需要commit和reset
I. git stash 命令
1. 基本命令
将当前改动暂存,恢复到上一次commit号对应的状态
git stash
复制代码
上面执行完毕之后,当前所有的改动会被暂存,然后工作区变得干净,使用git status
会发现没有修改
查看暂存的列表
git stash list
复制代码
如果需要恢复之前的改动,执行
git stash pop
复制代码
2. 实例演示
下面是个人的一个项目的测试结果
✗ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: spring-rabbit/src/test/java/com/git/hui/rabbit/spring/SprintUnit.javamodified: spring-rabbit/src/test/java/com/git/hui/rabbit/spring/fac/FacMQConsumer.javano changes added to commit (use "git add" and/or "git commit -a")✗ git stash
Saved working directory and index state WIP on master: 8a96c7b 添加基于配置的消费者方式
HEAD is now at 8a96c7b 添加基于配置的消费者方式✗ git stash list
stash@{0}: WIP on master: 8a96c7b 添加基于配置的消费者方式✗ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean✗ git stash pop
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: spring-rabbit/src/test/java/com/git/hui/rabbit/spring/SprintUnit.javamodified: spring-rabbit/src/test/java/com/git/hui/rabbit/spring/fac/FacMQConsumer.javano changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (fa73ca947d591003cd46a49f6d657cce43756d1a)✗ git stash list
✗ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: spring-rabbit/src/test/java/com/git/hui/rabbit/spring/SprintUnit.javamodified: spring-rabbit/src/test/java/com/git/hui/rabbit/spring/fac/FacMQConsumer.javano changes added to commit (use "git add" and/or "git commit -a")
复制代码
3. 进阶
简单的使用场景下,需要暂存时,直接输入 git stash
命令即可;需要恢复执行 git stash pop
;
如果出现多次的工作区暂存,会怎样?
两次暂存之后: (最近暂存的,序号最小)
✗ git stash list
stash@{0}: WIP on master: 8a96c7b 添加基于配置的消费者方式
stash@{1}: WIP on master: 8a96c7b 添加基于配置的消费者方式
复制代码
应用某次暂存:
git stash apply stash@{1}
复制代码
执行apply只是会恢复当时暂存的内容,但是不会删除,如果需要删除指定stash,可以执行
git stash drop stash@{1}
复制代码
4. 取消储藏
在某些情况下,你可能想应用储藏的修改,在进行了一些其他的修改后,又要取消之前所应用储藏的修改。Git没有提供类似于 stash unapply 的命令,但是可以通过取消该储藏的补丁达到同样的效果:
git stash show -p stash@{0} | git apply -R
复制代码
II. 其他
1. 参考
- Git 工具 - 储藏(Stashing)
2. 一灰灰Blog: https://liuyueyi.github.io/hexblog
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
3. 声明
尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
4. 扫描关注
180608-Git工具之Stash相关推荐
- git shanchu stash_git stash用法
常用git stash命令: (1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不 ...
- Git详解之六 Git工具(转)
Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力. 接下来你 ...
- Git 工具(写的很乱)
Git 工具 分支引用 指明一次提交最直接的方法是有一个指向它的分支引用. 这样你就可以在任意一个 Git 命令中使用这个分支名来代替对应的提交对象或者 SHA-1 值. 例如,你想要查看一个分支的最 ...
- Git详解之六:Git工具
Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力.(伯乐在线 ...
- Git工具和CODING平台
7.30日更新 git checkout -b testbuffer //新建分支用于测试buffer对代码进行修改git checkout master //切换回master分支git check ...
- Git详解之六 Git工具
Git详解之六 Git工具 Git工具 现在,你已经学习了管理或者维护 Git仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支 ...
- DSP集成开发工具CCS的Git工具使用说明(一)
关于CCS软件的Git使用说明 1.新建工程 点击窗口上的 File -> New -> CCS Project 如下图所示,设置工程名.工程路径,选择创建 Empty Proje ...
- Git 工具 - 子模块 外部引用
from:https://git-scm.com/book/zh/v1/Git-工具-子模块 Git 工具 - 子模块 子模块 经常有这样的事情,当你在一个项目上工作时,你需要在其中使用另外一个项目. ...
- git工具 将源码clone到本地指定目录的三种方式
git工具 将源码clone到本地指定目录的三种方式 CreationTime--2018年7月27日15点34分 Author:Marydon 1.情景展示 运行git-bash.exe,输入命令: ...
最新文章
- BlockChain:《Blockchain Gate》听课笔记——区块链构筑的比特世界 VS 现实的原子世界
- linux 修改文件访问权限
- SQL获取变量类型以及变量最大长度
- python调用shell该引用到什么类_python调用shell, shell 引用python
- 2021年Z世代“潮力量”洞察报告
- 精进:如何成为一个很厉害的人---书摘
- 正则表达式基本语法规范
- 对非线程安全类ListT的一些总结
- java生成pdf417条形码_python生成417条形码(PDF417)详解
- 【Unity3D】动态更换天空盒(场景不受天空盒影响 等问题)
- WIN10 LTSC 转 WIN10 专业版(纯净)
- linux分区修复命令,在Linux下成功修复分区表出错
- 诛仙mysql架设_目前最完整的诛仙私服架设教程
- 自动化测试运维|Selenuim IDE使用Firefox
- 关闭虚拟机linux的防火墙,Linux新建虚拟机网络配置,防火墙关闭
- C++ 查重(码蹄集 新手村)
- delta波 意识(摘要)
- 信息系统安全研究的内容包括哪些?
- 旋转角度如何知道是顺时针还是逆时针旋转?(仅供参考,更靠谱的是旋转轴到z轴正半轴上)
- python正则表达式匹配开头,正则表达式系列(一):匹配开头与结尾