Git flow的分支模型与及常用命令简介

时间:2022-12-10 08:37:25

Git flow的分支模型与及常用命令简介

Git flow是git的一个扩展集,它基于Vincent Driessen 的分支模型,文章“A successful Git branching model”对这一分支模型进行了描述,其示意图如下:

Git flow的分支模型与及常用命令简介

上图从左往右看,分别为
- 时间轴,从上往下时间在流逝
- feature分支(玫红),图上有两个feature分支,在这个分支上,进行功能特性的开发
- develop分支(黄色),git flow的主分支,feature分支和release分支都会将代码合并到此分支上
- release分支(绿色),总是基于develop分支创建,最后合并到develop分支和master分支
- hotfix分支(红色),总是基于master分支创建,最后合并到master分支和develop分支
- master分支(蓝色),git flow的主分支,在开发的整个阶段一直存在,平时不在此分支开发,因此代码比较稳定,可以用来发布

Git flow的源码可以通过以下链接下载:

https://github.com/nvie/gitflow

或者,直接输入以下命令安装git flow:

apt-get install git-flow

在Windows平台下安装git flow,可以参考《Windows环境下msysgit安装git flow》

我们可以通过以下命令来初始化一个现有的git本地仓库。

git flow init

接着回答几个关于分支的问题。不用担心,使用默认值即可,直接按回车键。

No branches exist yet. Base branches must be created now
Branch name for production releases: [master]
Branch name for “next release” development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []

这样,便完成了git flow的初始化工作。

在git flow 的分支模型中,有两个主分支masterdevelop,还有几个额外的分支来支持代码的版本管理。下面先简要介绍一下这些分支的特点和git flow常用命令的使用。

1. Master

master分支只有一个。
master分支上的代码总是稳定的,随时可以发布出去。
平时一般不在master分支上操作,当release分支和hotfix分支合并代码到master分支上时,master上代码才更新。
当仓库创建时,master分支会自己创建。

2. Develop

develop分支只有一个。
新特性的开发是基于develop分支的,但不直接在develop分支上开发,特性的开发是在feature分支上进行。
当develop分支上的特性足够多以至于可以进行新版本的发布时,可以创建release分支的。

3. Feature

可以同时存在多个feature分支,新特性的开发正是在此分支上面。
可以对每个新特性创建一个新的feature分支,当该特性开发完毕,将此feature分支合并到develop分支。
创建一个新的feature分支,可以使用以下命令:

git flow feature start test

执行以下命令后,feature/test分支会被创建。
当特性开发完毕,需要将此分支合并到develop分支,可以使用以下命令实现:

git flow feature finish test

上面的命令会将feature/test分支的内容merge到develop分支,并将feature/test分支删除。

feature分支只是存在于本地仓库,如果需要多个人共同开发此特性,也可以将feature分支推送到过程仓库。

git flow feature publish test

feature 分支的生命周期持续到特性的开发完毕,当完成特性的开发,你可以使用git的分支管理命令将此feature分支删除。

4. Release

当完成了特性的开发,并且将feature分支上的内容merge到develop分支上,这时可以开始着手准备新版本的发布,release分支正是作为发布而开设的分支。
release分支基于develop分支,在同一时间只有一个release分支,其生命周期较短,只是为了发布而使用。这意味着,在release分支上,只是进行较少代码修改,比如bug的修复,原有功能的完善等。不允许在release分支增加大的功能,因为这样会导致release分支的不稳定,不利于发布的进行。
当release分支(例如,v.1.0)被创建出来后,develop分支可能正准备另一版本(例如,v.2.0),因此,当release分支merge回develop分支时,可能会出现冲突,需要手工解决冲突才能继续merge。

通过以下命令来创建release分支:

git flow release start v.1.0

执行过完上面的命令,release分支release/v.1.0会被创建出来 ,并且切换到该分支。

当完成release分支功能的完善或者bug的修复后,执行以下命令来完成release分支:

git flow release finish v.1.0

这个命令会执行以下的操作:

  • 分支release/v.1.0 merge回master分支
  • 使用release/v.1.0分支名称打tag
  • 分支release/v.1.0 merge回develop分支
  • 删除release/v.1.0分支

5. Hotfix

当发现master分支出现一个需要紧急修复的bug,可以使用hotfix分支。hotfix分支基于master分支,用来修复bug,当完成bug的修复工作后,需要将其merge回master分支。
同一时间只有一个hotfix分支,其生命周期较短。

可以使用以下命令来创建hotfix分支:

git flow hotfix start v.1.0

使用以下命令来结束hotfix分支的生命周期:

git flow hotfix finish v.1.0

这句命令会将hotfix分支merge到master分支和release分支,并删除该hotfix分支。
值得注意的是,如果bug修复时,正存在着release分支,那么hotfix分支会merge到release分支,而不是develop分支。

可以使用下图来说明git flow这几分支的常用命令:

Git flow的分支模型与及常用命令简介

在开发的整个阶段,只有两个主分支贯穿于整个开发阶段:master分支和develop分支。功能特性的开发以及bug的修复都通过创建新的分支来实现,且这些分支的生命周期都比较短暂。开发成员之间的开发可以做到尽量不干扰对方,这保证了代码的稳定性。
git flow的分支模型简单清晰,易于使用。通过本文对git flow常用命令的介绍,你可以尽情享受它为我们管理代码带来的方便。

参考资料

  1. http://internetdevels.com/blog/git-flow-model
  2. http://danielkummer.github.io/git-flow-cheatsheet/index.zh_CN.html
  3. http://www.berlinix.com/it/gitflow.php