Git实战手册(三): stash解惑与妙用
0. 介绍
在实际项目开发中,总会遇到代码写到一半(没法去打
commit),去开启新的分支 修复Bug 或者 增加功能 的情况。如果不处理,未修改的代码就会被带入临时创建的新的分支,没写完的代码 和 要修复的代码混合在一起,绝对苦逼。而Git中的stash就是用来对付这种情况。
1. 初识git stash
stash在英文中的意思是:隐藏。在Git代码管理的过程中,它的作用也是隐藏没完成的代码,防止它干扰 别人 或者 新分支的工作。
关于git stash,常用命令如下:
| 命令 | 作用 |
|---|---|
git stash |
隐藏当前的工作现场, 此时, git status的结果是 clean |
git stash list |
查看所有隐藏, 每一行的冒号前面的字符串就是标识此隐藏的id |
git stash apply <id> |
重新显示标识为id的隐藏 |
git stash drop <id> |
git apply恢复隐藏后, 需要手动删除list列表中的记录 |
2. 应用与实战
假设:正当我在 master 分支上写着文档时候(没有完成、没有提交),同事发现 hello.py 这个脚本有问题,紧急报告给我进行修复。
收到报告,下意识就是开一个 debug 分支来处理bug。但是,现在的文档没完成,自然无法提交,又不能把没提交的东西带入到新创建的 debug 分支(执意如此,我也没办法 : ))。目前,status 如下:

为了达到目的,分为以下几步:
- 隐藏修改:
git stash:
- 创建新分支:
git branch debug:
- 在
debug分支上修复bug, 并且将修改添加到log中 :
- 回到
master分支, 合并debug分支的修改, 并且删除debug分支 :
- 重新显示隐藏的
stash,并且将其从stash list列表中删除 :
- 然后就可以愉快地继续做自己的事情啦!
感谢chucklu的提醒:上面第五步的2条命令,可以用git stash pop命令代替。
3. 拓展阅读
在实际生产过程中,难免会遇到多个 stash 的情况。此时,他们的id默认都是:stash{0}, stash{1}, stash{2} ... ...
当我们恢复一个 stash ,并且将它从 stash list 中移除的时候,在其下方的 stash 记录的id会自动变小,以保证id是从0到n的连续自然数列。所以,当从 stash list 移除一个 stash 后,一些 stash 的 id 就会发生改变。此处是个坑。
Git实战手册(三): stash解惑与妙用的更多相关文章
- Git实战手册(二): 标签应用和版本管理
教程所示图片使用的是 github 仓库图片,墙内朋友请移步原文地址 有空就来看看个人技术小站, 我一直都在 0. 背景介绍 当一个代码仓库进过长时间的迭代,针对不同的时期和需求,必定会有不同的版本. ...
- Git 实战手册(一): 批量修改log中的提交信息
本文须知 教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步原文地址 有空就来看看个人技术小站, 我一直都在 背景介绍 事情的起源是这样的:迷恋的谷歌的我最近申请了一个新的 googl ...
- Git实战(三)环境搭建
上次的博文中.我们介绍了一下关于Git作为版本号控制工具的基本原理,接下来我们来搭建一个主要的Git环境(因为我使用的是Windows系统.所以重点側重在这方面). Git安装 Git的安装很easy ...
- Git实战(四)状态转换
上次的Git实战(三)环境搭建博文.我们大致解说了一下git的环境安装,今天我们解说一下Git的状态转换. 学习版本号控制工具.对工具进行版本号控制之间的状态转换很重要.毕竟Git仅仅是一个工具.假设 ...
- svn 迁移至git操作手册
svn 迁移至git操作手册 项目交付.版本管理工具变更等情况下,迁移svn旧历史记录有很大必要,方便后续追踪文件的提交历史,文件修改记录比对等.git自带了从svn迁移至git的工具命令,可很好的对 ...
- apollo在liunx环境实战(三)
1. apollo在liunx环境实战(三) 1.1. 准备 下载apollo源码 https://github.com/ctripcorp/apollo 1.2. 创建数据库 在自己的liunx环境 ...
- Git使用手册【转】
转自:https://www.jianshu.com/p/e32a8e7ca93b 目录: Git是什么 基本概念 Git的诞生 Git的安装与配置 创建版本库 Git操作略览 远程仓库:git的杀招 ...
- Git详解之一 Git实战
Git详解之一 Git实战 入门 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章 ...
- Git实战(二)原理
上次的博文Git实战(一)版本号控制概述中我们简介了一下版本号控制系统的概念,重点对版本号控制的三种类型进行了分析和对照,从本篇博文開始我们进入Git的世界,首先介绍一下Git实现版本号控制的原理. ...
随机推荐
- _ZNote_Qt_QtCreator_Tips_粘贴_历史剪切板
发现 快捷键 Shift+Command + V 能够出现历史剪切板. 厉害了我的歌
- 【python-HTMLTestRunner】HTMLTestRunner测试报告中文乱码问题解决
打开HTMLTestRunner.改动如图所示行 改成‘utf-8’
- 第二周Access课总结
一.问;这节课你学到了什么知识? 答:回忆上周主要学了关于Access的基础知识和基本操作,一转眼,这周也学到了很多,主要学Access的数据类型的表的建立和管理相关的操作! 收获多少在于学了多少,正 ...
- Linux-程序包管理
Linux上的软件安装有2种形式:源码.二进制文件,源码需要在编译环境下编译安装,二进制可以直接安装. 1.程序包管理器 rpm 程序包管理器能够将目标二进制格式(也就是从源码编译好的二进制文件,包括 ...
- less的功能和介绍
在全新的css中,经过程序员们的开发和努力.又打造了全新的less样式表的全新界面,只需引入外部样式表即刻套用,加上了函数定义和取值.大大的降低了代码的书写量.也更加方便程序员的调用和修改!
- SDWebImage之SDWebImageDownloaderOperation
上篇讲了SDWebImageDownloader,从源码分析的过程中,我们知道,实际执行下载任务的是SDWebImageDownloaderOperation,本篇我们来看看SDWebImageDow ...
- linux(centos7)安装docker
1.检查内核版本,必须是3.10及以上 uname ‐r 2.安装docker yum install docker 3.输入y确认安装 4.启动docker [root@localhost ~]# ...
- 在源文件(.c)和头文件(.h)中声明和定义的区别——C语言
最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 情形一:在源文件(.c)中 相信大部分读者对声明和定义的理解是 ...
- JavaScript的BOM编程,事件-第4章
目标 BOM编程 window和document对象 window对象的属性和方法 document对象的属性和方法 JavaScript中对象的分类 浏览器对象:window对象 window对象, ...
- 从零搭建java后台管理系统(二)mysql和redis安装
接上篇开始安装mysql和redis 注意了,如果用阿里云服务器,外网访问的端口必须在安全组开启,否则外网访问不通 三.服务器安装redis和mysql 本次环境搭建将所有第三方服务会安装在阿里云服务 ...