Git分支那点事儿(上):什么是分支,如何管理分支?

一、前言

如果有人问你,当下最流行的“版本管理系统”(Version Control System)是什么,那你一定要毫不犹豫的告诉他,非Git莫属。

Git

相比同类软件,Git有很多优点。其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便。有些传统的版本管理软件,分支操作实际上会生成一份现有的代码的物理拷贝,而Git只生成一个指向当前版本(又称”快照“)的指针,因此非常快捷易用。
但是,太方便了也会产生副作用,如果你不注意,很可能留下一个到处都是分支,完全看不出主干发展的脉络。而本篇文章正是为了避免开发分支混乱而生。


二、分支管理

1.历史分支

相对使用仅有的一个master分支,Gitflow工作流使用2个分支来记录项目的历史。master储存正式发布的历史,develop分支作为功能的集成分支。这样也方便master分支上的所有提交分配一个版本号。

2.功能分支

每个新功能位于一个自己的分支,这样可以push到中央仓库以备份和协作。但功能分支不是从master分支上拉出来的新分支,而是使用develop分支作为父分支。当新功能完成时,合并回develop分支。新功能的提交不直接与master交互。


3.发布分支

一旦develop分支上的功能到了发布日期,就从develop分支fork一个发布分支(一般叫release)。release分支用于预发布测试,所以从这个时间点开始后新的功能不再加到这个分支上,release分支只应该做bug修复、文档生成和其他面向发布的任务。一旦release测试完毕并准备发布后,将其合并到master分支并分配一个版本号打上Tag。另外,release上做的bug修改要合并回develop分支。
使用一个专门用于发布的分支,是一个团队可以在完善发布版本的同时,另一个团队继续开发下一个版本功能。


4.维护分支

维护分支(一般叫hotfix)是唯一可以直接从master分支fork出来的分支,用于线上版本bug修复。修复完成后,应马上合并回master和develop分支,同时master分支用新版本号打上Tag。


结语

通过上面几个图文的解释,大家是不是都明白了呢,其实Git分支并不复杂,无非是master(线上),develop(开发),release(预发布),hotfix(线上bug修复)这四种常用的分支,只要理解他们的作用和应用场景并实践于工作中,相信一定会提高开发效率,降低管理成本。下一篇我将通过具体案例来讲解分支在日常团队开发中的具体应用,同时介绍一些git常用命令行。我们下期再见~

引用

http://blog.jobbole.com/23398/ 阮一峰:Git分支管理策略
http://www.bootcss.com/p/git-guide/ git-简易指南
http://nvie.com/posts/a-successful-git-branching-model/ A successful Git branching model
https://www.sourcetreeapp.com/ sourcetree 分支管理工具
http://semver.org/lang/zh-CN/ 语义化版本2.0.0

推荐阅读更多精彩内容