在开发过程中,大家都遇到过bug,并且有些bug是需要紧急修复的。

当开发人员遇到这样的问题时,首先想到的是我新切一个分支,把它修复了,再合并到master上。

当时问题来了,你当前正在开发的分支上面,还有未提交的代码,你又不想把代码提交了,怎么办呢?

git提供了stash功能,把当前工作目录现场给存储起来,等修复完bug,再切回来。

比如,我当前在dev分支上,我修改了hello.py文件

wangkongming@Vostro ~/babytree/github/test_git $ git st
On branch dev
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: hello.py no changes added to commit (use "git add" and/or "git commit -a")

执行git stash命令后,再查看分支状态

wangkongming@Vostro ~/babytree/github/test_git $ git stash
Saved working directory and index state WIP on dev: a9c8783 *modify dev 1
HEAD is now at a9c8783 *modify dev 1
wangkongming@Vostro ~/babytree/github/test_git $ git st
On branch dev
nothing to commit, working directory clean

从master上新切分支hot_fix来处理bug

wangkongming@Vostro ~/babytree/github/test_git $ git co master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
wangkongming@Vostro ~/babytree/github/test_git $ git co -b hot_fix
Switched to a new branch 'hot_fix'

修改了test/readme.txt文件

wangkongming@Vostro ~/babytree/github/test_git $ git st
On branch hot_fix
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: test/readme.txt no changes added to commit (use "git add" and/or "git commit -a")

添加到版本库,提交

wangkongming@Vostro ~/babytree/github/test_git $ git add .
wangkongming@Vostro ~/babytree/github/test_git $ git ci -m 'fix bug'
[hot_fix 7b3948b] fix bug
1 file changed, 1 insertion(+)

切回master,合并hot_fix分支

wangkongming@Vostro ~/babytree/github/test_git $ git co master
Already on 'master'
Your branch is up-to-date with 'origin/master'.
wangkongming@Vostro ~/babytree/github/test_git $ git merge hot_fix
Updating 1ebc483..7b3948b
Fast-forward
test/readme.txt | 1 +
1 file changed, 1 insertion(+)

ok,到此,这个紧急的bug,已经合并到master分支上。现在可以回到dev分支上继续开发了。

stash list来查看已经存储的工作现场。

wangkongming@Vostro ~/babytree/github/test_git $ git stash list
stash@{0}: WIP on dev: a9c8783 *modify dev 1

如何恢复工作现场呢?

  • 第一种方案,用git stash apply恢复,但是恢复后,stash内容不删除,需要用git stash drop来删除
  • 第二种方案,用git stash pop,恢复的同时把stash内容也删除了。
wangkongming@Vostro ~/babytree/github/test_git $ git stash pop
On branch dev
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: hello.py no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (d658ee3001b54567337fe7fe522e6fd813fd73ae)

总结###

修复bug时,通过新建分支,去修复bug,然后合并分支,删除分支。

当前工作没有完成,先把现场git stash存储一下,去修复bug,修复完后,在git stash pop,回到工作现场。

参考文章:Bug分支

最新文章

  1. meta
  2. [原创]C#应用WindowsApi实现查找\枚举(FindWindow、EnumChildWindows)窗体控件,并发送消息。
  3. 跟我一起云计算(1)——storm
  4. Java中不同的并发实现的性能比较
  5. 深入C#数据类型
  6. Xcode创建Object-C程序
  7. 译:C#面向对象的基本概念 (Basic C# OOP Concept) 第三部分(多态,抽象类,虚方法,密封类,静态类,接口)
  8. asp.net夜话之十一:web.config详解
  9. GO语言函数与类型
  10. 微软开放技术发布开源的微软云服务器底盘管理器 (Chasis Manager) 软件
  11. 关于.net类型转换判断问题
  12. 【POJ2114】Boatherds 树分而治之
  13. Javascript 面向对象编程—封装
  14. leanote 信息栏显示笔记本和笔记类型
  15. Day055--MySQL--外键的变种,表与表的关系,单表查询,多表查询, 内连接,左右连接,全外连接
  16. java -jar启动java项目时,引用不同配置文件命令
  17. C++反射机制:可变参数模板实现C++反射
  18. Codeforces Round #440 Div. 1
  19. poj 2955&quot;Brackets&quot;(区间DP)
  20. http响应头

热门文章

  1. Scala变量(三)
  2. Elasticsearch 调优 (官方文档How To)
  3. 微软本月将推Win10 望打破Win8所带来差评影响
  4. 搭建基于PHP的www服务器
  5. WPF 开发 WebBrowser
  6. SQL Server数据库设计规范
  7. CentOS安装Redis详细教程
  8. JavaEE学习文章汇总-ssm框架
  9. 如何将本地项目与coding.net/github上的项目绑定
  10. maven+springmvc+dubbo+zookeeper