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相关推荐

  1. git shanchu stash_git stash用法

    常用git stash命令: (1)git stash save "save message"  : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不 ...

  2. Git详解之六 Git工具(转)

    Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力. 接下来你 ...

  3. Git 工具(写的很乱)

    Git 工具 分支引用 指明一次提交最直接的方法是有一个指向它的分支引用. 这样你就可以在任意一个 Git 命令中使用这个分支名来代替对应的提交对象或者 SHA-1 值. 例如,你想要查看一个分支的最 ...

  4. Git详解之六:Git工具

    Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力.(伯乐在线 ...

  5. Git工具和CODING平台

    7.30日更新 git checkout -b testbuffer //新建分支用于测试buffer对代码进行修改git checkout master //切换回master分支git check ...

  6. Git详解之六 Git工具

    Git详解之六 Git工具 Git工具 现在,你已经学习了管理或者维护 Git仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支 ...

  7. DSP集成开发工具CCS的Git工具使用说明(一)

    关于CCS软件的Git使用说明 1.新建工程 点击窗口上的 File -> New -> CCS Project     如下图所示,设置工程名.工程路径,选择创建 Empty Proje ...

  8. Git 工具 - 子模块 外部引用

    from:https://git-scm.com/book/zh/v1/Git-工具-子模块 Git 工具 - 子模块 子模块 经常有这样的事情,当你在一个项目上工作时,你需要在其中使用另外一个项目. ...

  9. git工具 将源码clone到本地指定目录的三种方式

    git工具 将源码clone到本地指定目录的三种方式 CreationTime--2018年7月27日15点34分 Author:Marydon 1.情景展示 运行git-bash.exe,输入命令: ...

最新文章

  1. BlockChain:《Blockchain Gate》听课笔记——区块链构筑的比特世界 VS 现实的原子世界
  2. linux 修改文件访问权限
  3. SQL获取变量类型以及变量最大长度
  4. python调用shell该引用到什么类_python调用shell, shell 引用python
  5. 2021年Z世代“潮力量”洞察报告
  6. 精进:如何成为一个很厉害的人---书摘
  7. 正则表达式基本语法规范
  8. 对非线程安全类ListT的一些总结
  9. java生成pdf417条形码_python生成417条形码(PDF417)详解
  10. 【Unity3D】动态更换天空盒(场景不受天空盒影响 等问题)
  11. WIN10 LTSC 转 WIN10 专业版(纯净)
  12. linux分区修复命令,在Linux下成功修复分区表出错
  13. 诛仙mysql架设_目前最完整的诛仙私服架设教程
  14. 自动化测试运维|Selenuim IDE使用Firefox
  15. 关闭虚拟机linux的防火墙,Linux新建虚拟机网络配置,防火墙关闭
  16. C++ 查重(码蹄集 新手村)
  17. delta波 意识(摘要)
  18. 信息系统安全研究的内容包括哪些?
  19. 旋转角度如何知道是顺时针还是逆时针旋转?(仅供参考,更靠谱的是旋转轴到z轴正半轴上)
  20. python正则表达式匹配开头,正则表达式系列(一):匹配开头与结尾

热门文章

  1. 微信、移动端css布局的那些坑
  2. 重做日志文件(redo log file)和归档日志文件(archive log file)
  3. spring cloud微服务分布式云架构 - Spring Cloud集成项目简介
  4. Java Socket实战之一:单线程通信
  5. 一次gitlab无法使用ssh登录的问题解决
  6. 测试过程之过分关注功能性测试
  7. 设计模式04_抽象工厂模式
  8. 观察者模式定义了一种一对多的对象关系,当一个对象改变时,此对象对应的监控对象跟着改变!!!...
  9. windows上的svn服务器迁移到linux
  10. 【转】js frame 框架编程