Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/

当你接到一个修复代码为101的任务的时候,很自然的你想创建一个分支issue-101来修复它,但是等等,当前正在dev上进行的工作还没有提交:

$ git status
On branch dev
Changes to be committed:
(use "git reset HEAD <file>..." to unstage) new file: hello.py 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: readme.txt

并不是你不想提交,而是工作到一半,还没发提交,预计完成还需要一天的时间。但是要求bug在两个小时内修复。

Git提供了一个stash功能,可以把当前的工作现场“储藏起来”,等待以后恢复工作现场后继续工作:

$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge

现在用git status查看工作区,就是干净的(除非没有被Git管理的文件),因此可以放心的创建分支来修复bug。

首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
(use "git push" to publish your local commits) $ git checkout -b issue-101
Switched to a new branch 'issue-101'

现在修复bug,需要将“Git is free software ...”改为“Git is a free software ...”然后提交:

$ git add readme.txt
$ git commit -m "fix bug 101"
[issue-101 4c805e2] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)

修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
(use "git push" to publish your local commits) $ git merge --no-ff -m "merged bug fix 101" issue-101
Merge made by the 'recursive' strategy.
readme.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

bug修复完成,我们可以继续回到dev分支工作。

$ git checkout dev
Switched to branch 'dev' $ git status
On branch dev
nothing to commit, working tree clean

我们可以看到工作区是干净的,刚才的工作现场存哪儿去了?用git stash list命令查看:

$ git stash list
stash@{0}: WIP on dev: f52c633 add merge

工作现场还在,Git把stash的内容存在某个地方了,但是需要回复一下,有两个办法:

一是用git stash apply回复,但是恢复后,stash内容并不删除,你需要用git stash droop删除

二是用git stash 婆婆,恢复的同时把stash内容也删除了

$ git stash pop
On branch dev
Changes to be committed:
(use "git reset HEAD <file>..." to unstage) new file: hello.py 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: readme.txt Dropped refs/stash@{0} (5d677e2ee266f39ea296182fb2354265b91b3b2a)

再用git stash list查看,就看不到任何内容了。

你可以多次stash,恢复的时候,先用git stash list查看,然后用恢复指定的stash,用命令:

$ git stash apply stash@{0}

在master分支上修复bug后,我们会思考,dev分支时早期从master分支分出来的,所以这个bug其实在当前分支上也存在。

那怎么在dev分支上修复同样的bug?重复操作一次不就行了?有没有更简单的方法?

有的!

同样的bug,要在dev上修复,我们只需要把4c805e2 fix bug 101这个提交所做的修改“复制”到dev分支。注意:我们只想

复制4c805e2 fix bug 101这个提交所做的修改,并不是把整个master分支merge过来。

为了方便操作,Git专门提供cherry -pick命令,让我们能复制一个特定的提交到当前分支:

$ git branch
* dev
master
$ git cherry-pick 4c805e2
[master 1d4b803] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)

Git会自动给dev分支做了一次提交,注意这次提交的commit1d4b803,它不同于master的4c805e2,因为这两个commit只是改动

相同,但是确实是两个不同的commit。用git cherry -pick,我们就不需要在dev分支上动手再把修bug的过程重复一遍。

有的人的会想,既然可以在master分支上修复bug后,在dev分支上可以重复这个修复过程,那么直接在dev分支上修复bug,然后

在master分支上重复行不行?当然可以,不过你仍需要git stash命令保护现场,才能从dev分支切换到master分支

Summary

修复bug时,我们会通过创建新的bug分支进行修复,然后合并最后删除;

当前的的工作没有完成的时候,先把工作现场git stash一下,然后修复bug,修复后再用git stash pop回到工作现场;

在master分支上修复的bug,想要合并到当前的dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”

到当前的分支,避免重复劳动。

Git速成学习第六课:Bug分支的更多相关文章

  1. Git速成学习第五课:分支管理策略

    Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 通常合并分支时,如果可能用Fast forward模式,但是在这种模式下,删除分支后,会丢掉分支 ...

  2. Git速成学习第三课:创建与合并分支

    本来第三课想记录一下远程仓库的创建与克隆0.0但是想了想还是不写了. 这里写一下分支管理中的创建与合并. Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng. ...

  3. Git速成学习第四课:解决冲突

    Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 我们继续练习,准备新的feature1分支. $ git checkout -b feature ...

  4. Git速成学习第二课:管理修改与删除文件

    Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 管理修改 首先我们需要明确,为什么说Git管理的是修改而不是文件呢? 我们首先对于已有的read ...

  5. Git速成学习第一课:创建版本库与版本回退

    Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 我太困了0.0精神点再写...... /*我来啦!以后会陆续更新自己的学习笔记*/ Git是分布 ...

  6. Python学习第六课

    Python学习第六课 课前回顾 列表 创建 通过 [] :写在[]里,元素之间用逗号隔开 对应操作: 查 增 append insert 改(重新赋值) 删除(remove del pop(删除后会 ...

  7. Git-第五篇廖雪峰Git教程学习笔记(4)分支

    1.一开始,只有一个主分支(master),HEAD指向Master,而Master指向主分支.现在我们创建dev分支. lfy@lfy-PC MINGW64 /c/fyliu/lfyTemp/git ...

  8. Es学习第六课, ES基本搜索_search

    前面几课ES的基本概念.安装和分词都讲过了,下面我们就来实战一下ES的核心功能-搜索,这节课我们主要讲的是基本搜索 _search(注意:ES的关键字都要加前缀_,所以我们在定义索引.类型名称时不要带 ...

  9. 【原创】bootstrap框架的学习 第六课[bootstrap代码]

    Bootstrap 允许您以两种方式显示代码: 第一种是 <code> 标签.如果您想要内联显示代码,那么您应该使用 <code> 标签. 第二种是 <pre> 标 ...

随机推荐

  1. c语言1博客作业07

    一.本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/9929 我 ...

  2. 使用 EasyExcel 读取Excel(两种方式)

    引入 jar 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...

  3. EMF保存CDATA

    /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public String ...

  4. python文件操作知识点总结:写入篇

    文件写入: 文中的两个变量:f 和 f1(截图时被该死的灯泡遮挡住了) 被称作文件对象 或文件句柄(重口味的叫法,感觉很C++,句子又不是刀子,怎么还带柄?) 以逗号为界,open()方法所依赖的3个 ...

  5. ACM-ICPC 2018 南京赛区现场赛 E. Eva and Euro coins (思维)

    题目链接:https://codeforc.es/gym/101981/attachments 题意:给出两个只包含01的字符串,每次可以选择连续k个相同的数字进行翻转,问能否通过若干次操作把两个字符 ...

  6. Spring Boot 之FilterRegistrationBean --支持web Filter 排序的使用(转)

    Spring Boot 之FilterRegistrationBean  --支持web Filter 排序的使用Spring 提供了FilterRegistrationBean类,此类提供setOr ...

  7. IDEA jetbrain Live Template

    IDEA(jetbrain通用)优雅级使用教程 IDEA 强大的 Live Templates(转) 官网

  8. 分布式锁的三种实现方式 数据库、redis、zookeeper

    版权声明: https://blog.csdn.net/wuzhiwei549/article/details/80692278 一.为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变 ...

  9. 定时器TIM,pwm

    一.定时器 1.     定义 设置等待时间,到达后则执行指定操作的硬件. 2.    STM32F407的定时器有以下特征 具有基本的定时功能,也有PWM输出(灯光控制.电机的转速).脉冲捕获功能( ...

  10. netstat 基本用法

    Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字.如果你想确认系统上的 ...