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.java
modified: spring-rabbit/src/test/java/com/git/hui/rabbit/spring/fac/FacMQConsumer.java no 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.java
modified: spring-rabbit/src/test/java/com/git/hui/rabbit/spring/fac/FacMQConsumer.java no 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.java
modified: spring-rabbit/src/test/java/com/git/hui/rabbit/spring/fac/FacMQConsumer.java no 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. 参考

2. 一灰灰Blog: https://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

3. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

4. 扫描关注

 
blogInfoV2.png

180608-Git工具之Stash的更多相关文章

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

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

  2. Git详解之六:Git工具

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

  3. git工具学习

    最近实习的时候,遇到git工具,发现好强大之前没用过,特来学习下,然后自己注册了一个github账号,结合git命令练习一下,git的安装就不说了. 学习资料来源:廖雪峰Git教程 git简介: gi ...

  4. Git工具和GitHub的使用

    一.Git工具的安装 1)centos系统下安装 1.1)查看环境 [root@gitlab ~]# rpm -qa centos-release centos-release--4.1708.el7 ...

  5. git工具,conflict冲突解决方法

    这篇文章需要对git具有一定的了解,并且知道如何安装git工具(其实就是上git官网下载个文件,安装) git这种版本控制工具有什么好处 第一个,方便可以多人协同开发同一个项目或系统 第二个,当你系统 ...

  6. Git详解之六 Git工具

    以下内容转载自:http://www.open-open.com/lib/view/open1328070367499.html Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控 ...

  7. 【转】第 02 天:在 Windows 平台必裝的三套 Git 工具

    原文网址:https://github.com/doggy8088/Learn-Git-in-30-days/blob/master/docs/02%20%E5%9C%A8%20Windows%20% ...

  8. windows中使用Git工具连接GitHub(配置篇)

    Git在源码管理领域目前占很大的比重了,而且开源的项目很多都转到GitHub上面了.例如:jQuery, reddit, Sparkle, curl, Ruby on Rails, node.js,  ...

  9. 使用git工具将项目上传到github

    注册github账号 https://github.com/ 安装git工具: https://git-for-windows.github.io/ 上面的准备工作完成后,现在开始操作. 一.进入gi ...

随机推荐

  1. js 实现 文字打印效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. win7利用winSCP上传文件到ubuntu server

    1.为ubuntu server设置root密码: sudo passwd root 先设密码在登录 2. su root进入root账户: 3.安装SSH:sudo apt-get install ...

  3. Oracle中order by case 用法

    select * from ly_familyinformation ' ' order by case when relation = '购房人/申请人' then when relation = ...

  4. mysql 使用order by

    1.mysql 使用order by field() 自定义排序 order by field(value,str1,str2,str3,str4......strn) 例如:select * fro ...

  5. iOS读取info.plist中的值

    在app运行的时候,需要读取info.plist中的信息,用以下代码可获取整个info.plist的信息 [[NSBundle mainBundle] infoDictionary] 以下为根据 ke ...

  6. 阿里云服务器发送邮件失败,25端口被禁用,采用ssl 方式 465端口发送

    /** * 邮件工具类 * User: NZG * Date: 2019/3/8 * Time: 12:25 **/ @Data @Component @Configuration @Configur ...

  7. #leetcode刷题之路14-最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...

  8. 基于MySQL INNODB的优化技巧

    背景 ​ 回顾人们在开始工作之前,都会问自己这样一个问题:给你一台16G内存的Innodb专用数据库服务器,如何配置才能让其稳定.高效地给典型的Web应用提供服务? 硬件 内存:内存对于Innodb数 ...

  9. 一个hibernate中的异常:NonUniqueDiscoveredSqlAliasException

    在hibernate中用SQL查询返回的结果集中,列名或别名必须唯一,否则会报下面的错误.返回的结果集中,列名或别名可以没有,但只能有一列没有. //空别名重复的情况:org.hibernate.lo ...

  10. vue中将html字符串转换成html后的一些问题

    今天整理之前做vue项目时遇到的一些问题,发现了当时遇到的一个很小但是又会引出很多问题的一个问题(总之就是很有意思,听我慢慢给你到来),这个问题就是当时处理后端数据时,如何将后端返回来的字符串转换成h ...