Git速成学习第六课:Bug分支
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分支做了一次提交,注意这次提交的commit是1d4b803,它不同于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分支的更多相关文章
- Git速成学习第五课:分支管理策略
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 通常合并分支时,如果可能用Fast forward模式,但是在这种模式下,删除分支后,会丢掉分支 ...
- Git速成学习第三课:创建与合并分支
本来第三课想记录一下远程仓库的创建与克隆0.0但是想了想还是不写了. 这里写一下分支管理中的创建与合并. Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng. ...
- Git速成学习第四课:解决冲突
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 我们继续练习,准备新的feature1分支. $ git checkout -b feature ...
- Git速成学习第二课:管理修改与删除文件
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 管理修改 首先我们需要明确,为什么说Git管理的是修改而不是文件呢? 我们首先对于已有的read ...
- Git速成学习第一课:创建版本库与版本回退
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 我太困了0.0精神点再写...... /*我来啦!以后会陆续更新自己的学习笔记*/ Git是分布 ...
- Python学习第六课
Python学习第六课 课前回顾 列表 创建 通过 [] :写在[]里,元素之间用逗号隔开 对应操作: 查 增 append insert 改(重新赋值) 删除(remove del pop(删除后会 ...
- Git-第五篇廖雪峰Git教程学习笔记(4)分支
1.一开始,只有一个主分支(master),HEAD指向Master,而Master指向主分支.现在我们创建dev分支. lfy@lfy-PC MINGW64 /c/fyliu/lfyTemp/git ...
- Es学习第六课, ES基本搜索_search
前面几课ES的基本概念.安装和分词都讲过了,下面我们就来实战一下ES的核心功能-搜索,这节课我们主要讲的是基本搜索 _search(注意:ES的关键字都要加前缀_,所以我们在定义索引.类型名称时不要带 ...
- 【原创】bootstrap框架的学习 第六课[bootstrap代码]
Bootstrap 允许您以两种方式显示代码: 第一种是 <code> 标签.如果您想要内联显示代码,那么您应该使用 <code> 标签. 第二种是 <pre> 标 ...
随机推荐
- 重构CMDB,避免运维之耻
CMDB,几乎是每个运维人都绕不过去的字眼,但又是很多运维人的痛,因为CMDB很少有成功的,因此我也把它称之为运维人的耻辱. 那么到底错在哪儿了?该如何去重构它? 今天我想从我的角度来和大家探讨一下业 ...
- Django 数据库mysql到models的映射方法
Django自动生成models 如果数据库表已经存在,执行命令,可以自动生成Models模型,实现models与数据表的映射 >>> python manage.py inspec ...
- FastDFS+Nginx+Module
1.安装libevent wget https://cloud.github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.g ...
- CF46F Hercule Poirot Problem
题意: 有n个房间和m扇门,每扇门有且仅有一把钥匙 有k个人度过了两天,在第一天开始的时候所有的门都是关闭的,在第二天结束的时候,所有的门也都是关闭的 在这两天内,每个人可以执行如下操作若干次: 关上 ...
- BZOJ 1420 Discrete Root
思路:数学大汇总 提交:\(3\)次 错因:有一个\(j\)写成\(i\) 题解: 求:\(x^k \equiv a \mod p\) 我们先转化一下:求出\(p\)的原根\(g\) 然后我们用\(B ...
- PHP mysqli_dump_debug_info() 函数
mysqli_dump_debug_info() 函数转储调试信息到日志中. <?php mysqli_dump_debug_info($con); ?>
- crm-权限管理
1 用户登录 设置session 将权限存放在session中 2 设置中间件,进行拦截 0 添加白名单,判断是否在白名单上 1 判断是否登录 2 权限过滤
- [转]vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,Cr ...
- [shell]如何测试shell脚本,保证正确
如何用最快最有效的方式进行测试? 很多开发的习惯是,二话不说,写完/拿到,就跑一把,看看输入,输出,想要的操作是否完成,也就过了. 其实这是十分不严谨的,若是未经过QA,风险还是相当大的. 以下即sh ...
- 将String类型的字符串拼接成以逗号分隔的字符输出
package test; import java.util.ArrayList; import java.util.List; public class Tesdssss { private sta ...