为什么要有分支
建立分支的原因是 git 因为是分布式的,所以其核心就是分支,分支的意义在于,可以将项目代码按照功能、模块拆分成不同的分支。比如这个产品要加一个支付功能和一个登陆功能,可以创建两个分支,交给不同的开发人员并行开发。登陆功能先开发完,测试无误后合并改分支到 master 分支,master 分支部署上线。支付功能虽然没有开发完成,但是在另一条分支上,所以产品上线和功能开发完全不受影响。这才是分布式开发的高效模式。还有这样,以自己名字建立一个分支比如 xiancai,这个分支是已经做好的功能,随时可以合并到 master 上线,开发的时候,建立一个带功能前缀的分支,比如 xiancai-ninghao 、xiancai-ninghao 等等,开发完之后在合并到 xiancai,每次上线,把 xiancai 合并到 master 。总之分支的做重要的意义就是提高效率!!! 这样方便团队开发,并且不会导致混乱。
分支有如下几条:
- Master 主分支
- Develop 分支
- Feature 功能分支
- Release 预发布分支
- Hotfix(或者Fixbug) 分支
以上各分支之间的逻辑关系见下图;
其中对于 Feature 功能分支有;
- 从哪个分支分离开来:develop
- 必须要合并到哪个分支上:develop
- 分支的命名规范:除了 master,develop,release-,或者 hotfix- 以外的名字都可以比如可以用 feature-*的方式命名。
其中对于 Release 预发布分支有;
- 从哪个分支分离开来: develop
- 必须要合并到哪个分支上:develop 与 master
- 分支的命名规范: release-*
其中对于 Hotfix(或者 Fixbug) 分支有;
- 从哪个分支分离开来:master
- 必须要合并到哪个分支上:develop 与 master
- 分支的命名规范:hotfix-* 或者 fixbug-*
主分支
Master 主分支
首先,代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。Git 主分支的名字,默认叫做 Master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。
Develop 分支
主分支只用来分布重大版本,日常开发应该在另一条分支上完成。我们把开发用的分支,叫做 Develop。
创建分支
git branch develop #只创建分支
git checkout develop #创建并切换到 develop 分支
合并分支
git checkout master #切换到主分支
git merge --no-ff develop #把 develop 合并到 master 分支,no-ff 选项的作用是保留原分支记录
git branch -d develop #删除 develop 分支
这里稍微解释一下,上一条命令的--no-ff参数是什么意思。默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支。
次分支
除了 master 与 develop 这两个主分支,在开发时还可以创建一些次分支,目的是让团队不同的成员之间可以平行开发,更容易跟踪功能,准备为生产的发行版,快速修复生产上的问题等等。这些分支生命周期有限,可以在用完以后删掉他们。
Feature 功能分支
Feature(功能) 分支,有时候也叫 Topic 分支。在这种分支上去开发新的功能。当开发功能的时候,这个功能属于哪个目标发行还不知道。功能如果一直在开发,对应的这个功能分支就可以一直存在,不过到最后还是要合并到 develop 分支上,或者如果不想要开发的这个功能了,可以直接扔掉它。
功能名字的命名已经在上文中有提到。
创建一个功能分支:
git checkout -b feature-x develop
开发完成后,将功能分支合并到develop分支:
git checkout develop
git merge --no-ff feature-x
删除feature分支:
git branch -d feature-x## Release 预发布分支
它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release-*的形式。
创建一个预发布分支:
git checkout -b release-1.2 develop
确认没有问题后,合并到master分支:
git checkout master
git merge --no-ff release-1.2
#对合并生成的新节点,做一个标签
git tag -a 1.2
再合并到develop分支:
git checkout develop
git merge --no-ff release-1.2
最后,删除预发布分支:
git branch -d release-1.2
Fixbug 修补bug分支
最后一种是修补bug分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。 修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用fixbug-*的形式。
创建一个修补bug分支:
git checkout -b fixbug-0.1 master
修补结束后,合并到master分支:
git checkout master
git merge --no-ff fixbug-0.1
git tag -a 0.1.1
再合并到develop分支:
git checkout develop
git merge --no-ff fixbug-0.1
最后,删除"修补bug分支":
git branch -d fixbug-0.1