Git之所以能够在众多版本控制系统中脱颖而出,第一个原因就是他独特的暂存区stage;第二个原因就是我们今天要讲的分支branch了。
什么是分支?
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。
如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN!
实际用处
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致其他clone了该版本的人无法工作;如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。所以,现在处于提交或者不提交都不好的两难处境。要是提交没有开发好的代码之后不影响原来正常工作的代码就好了,等到功能开发完毕,再把这些新增的代码合并到原来正常工作的代码上,这样就完美了!git有这样的功能吗?
答案当然是有了!git的分支就是专门为这种情况而设计的。
一般来说,我们在开发的时候,git仓库有三条分支。
- 第一条分支为master,用于存放当前程序的发行版本,也就是说,无论如何这个版本是能正常编译的,尽管可能有Bug,或者有些Feature没有实现。
- 第二条分支为Bug分支,用于处理master分支中出现的Bug。比如:当我们发现master分支中的程序出现Bug时,我们就在Bug分支下进行修复工作,此时master分支还处于原来的状态。等我们在Bug分支上修复完毕之后,我们再将Bug分支合并到master分支上,此时master分支就堵上了原来的bug。
- 第三条分支为Feature分支,基于master分支上的版本来开发新的功能。比如:我们现在要基于master分支上的某版本来开发一个特效。我们就在Feature分支上进行开发,等开发完毕,再merge到master分支上,之后,master分支上的新版本就有了我们在Feature上开发的功能了。
与其他版本控制系统的不同,git创建切换和删除分支的速度很快。git的速度如果是火箭的话,SVN等版本控制系统的速度就相当于蜗牛。超级慢的速度直接导致了SVN等版本控制系统的分支功能成了“摆设”。
分支的基本操作
- 增:
git branch <branch_name>
- 删:
git branch -d <branch_name>
- 改:
git checkout <branch_name>
- 查:
git branch
special function: - 增+改:
git checkout -b <branch_name>
- 合并:
git merge <branch_name>
- 增:
git分支的工作原理
解决冲突
分支管理策略
Bug分支
Feature分支
多人协作