关于git flow

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

git flow分支模型

图片.png

上图从左往右看,分别为

  • 时间轴,从上往下时间在流逝

  • feature分支(玫红),图上有两个feature分支,在这个分支上,进行功能特性的开发

  • develop分支(黄色),git flow的主分支,feature分支和release分支都会将代码合并到此分支上

  • release分支(绿色),总是基于develop分支创建,最后合并到develop分支和master分支

  • hotfix分支(红色),总是基于master分支创建,最后合并到master分支和develop分支

  • master分支(蓝色),git flow的主分支,在开发的整个阶段一直存在,平时不在此分支开发,因此代码比较稳定,可以用来发布

<2> 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的初始化工作。

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

  • ①. Master

master分支只有一个。

master分支上的代码总是稳定的,随时可以发布出去。

平时一般不在master分支上操作,当release分支和hotfix分支合并代码到master分支上时,master上代码才更新。

当仓库创建时,master分支会自己创建。

  • ②. Develop

develop分支只有一个。

新特性的开发是基于develop分支的,但不直接在develop分支上开发,特性的开发是在feature分支上进行。

当develop分支上的特性足够多以至于可以进行新版本的发布时,可以创建release分支的。

  • ③. 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分支删除。

  • ④. 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分支

  • ⑤. 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 commands


结束语:
在开发的整个阶段,只有两个主分支贯穿于整个开发阶段:master分支和develop分支。功能特性的开发以及bug的修复都通过创建新的分支来实现,且这些分支的生命周期都比较短暂。开发成员之间的开发可以做到尽量不干扰对方,这保证了代码的稳定性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容