Git Flow详细介绍和使用

 

什么是GitFlow?

Git Flow定义了一个项目发布的分支模型,为管理具有预定发布周期的大型项目提供了一个健壮的框架,是由 Vincent Driessen 提出的一个 git操作流程标准、解决当分支过多时 , 如何有效快速管理这些分支。

使用GitFlow 的优势

并行开发:GitFlow可以很方便的实现并行开发。每个新功能都会建立一个新的 feature分支,从而和已经完成的功能隔离开来,而且只有在新功能完成开发的情况下,其对应的feature分支才会合并到主开发分支上(也就是我们经常说的develop分支)。另外,如果你正在开发某个功能,同时又有一个新的功能需要开发,你只需要提交当前 feature 的代码,然后创建另外一个feature 分支并完成新功能开发。然后再切回之前的 feature 分支即可继续完成之前功能的开发。

协作开发:GitFlow 还支持多人协同开发,因为每个 feature 分支上改动的代码都只是为了让某个新的 feature 可以独立运行。同时我们也很容易知道每个人都在干啥。

阶段式发布:当一个新 feature 开发完成的时候,它会被合并到 develop 分支,这个分支主要用来暂时保存那些还没有发布的内容,所以如果需要再开发新的 feature,我们只需要从 develop 分支创建新分支,即可包含所有已经完成的 feature 。

支持紧急修复:GitFlow 还包含了 hotfix 分支。这种类型的分支是从master上创建出来并做一个紧急的修复,而且这个紧急修复只影响这个已经发布的 tag,而不会影响到你正在开发的新 feature。

GitFlow基本分支

·  master分支存放所有正式发布的版本,可以作为项目历史版本记录分支,不直接提交代码。仅用于保持一个对应线上运行代码的code base。

·  develop分支为主开发分支,不直接提交代码

·  feature分支为新功能分支,feature分支都是基于develop创建的,开发完成后会合并到develop分支上。同时存在多个

·  release分支基于最新develop分支创建,当新功能足够发布一个新版本(或者接近新版本发布的截止日期),从develop分支创建一个release分支作为新版本的起点,用于测试,所有的测试bug在这个分支改。测试完成后合并到master并打上版本号,同时也合并到develop,更新最新开发分支。(一旦打了release分支之后不要从develop分支上合并新的改动到release分支),同一时间只有1个,生命周期很短,只是为了发布。

·  hotfix分支基于master分支创建,对线上版本的bug进行修复,完成后直接合并到master分支和develop分支,如果当前还有新功能release分支,也同步到release分支上。同一时间只有1个,生命周期较短

Git Flow使用

1安装Git Flow(最新的git bash已经支持,不用安装)/ Sourcetree。

2、Git Flow常用命令,也可以使用Git命令按照gitflow的流程执行。

gitflow init:初始化一个现有的 git 库,将会设置一些初始的参数,如分支前缀名等,建议用默认值。

git flow feature start [featureBranchName]: 创建一个基于develop的feature分支,并切换到这个分支之下。

git flow feature publish [featureBranchName]:将feature 分支上传至远端,也可以使用git的push命令

git flow feature finish [featureBranchName]: 结束 feature 分支,并 merge 至 develop, 删除本地分支、远程分支(如已推送至仓库), 切换回develop分支。

git flow release start [releaseBranchName]:开始准备release版本,从 develop分支开始创建一个 release 分支。

git flow release publish [releaseBranchName]:将 release 分支上传至远端, 也可以使用git的push命令。

git flow release finish [releaseBranchName]:完成 release 测试,自动将代码 merge 到 master 和develop 分支,用 release 分支名打 Tag,删除本地分支、远程分支(如已推送至仓库)。

git flow hotfix start [hotfixBranchName]:基于 master 分支新建hotfix分支。

git flow hotfix publish [hotfixBranchName]:将hotfix分支上传至远端, 也可以使用git的push命令。

git flow hotfix finish [hotfixBranchName]:结束 hotfix 分支,并 merge 到 master 分支和develop 分支, 自动打tag,删除本地分支、远程分支(如已推送至仓库)。

3GitFlow 插件,jgitflow-maven-plugin,可以简化整个流程,让很多操作自动化。

官方文档:https://bitbucket.org/atlassian/jgit-flow/wiki/Home

Git Flow基础开发流程和命令

git-flow 命令工具,

创建git-flow 分支模型:

a.在一个全新目录下构建 git-flow 模型:git flow init 一路默认Enter键即可

b.在现有的版本库构建(businessno-service):git flow init

构建成功后自动会切换到develop分支,见上图

新功能开发,代号V1.0

任何开发都必须基于develop分支:git flow feature start V1.0

git-flow 基于develop 创建分支feature/V1.0,并自动切换到feature/V1.0.进行此次开发。

  推送分支到远程仓库:git flow feature publish V1.0或者

git push --set—upstream origin feature/V1.0

完成功能开发: git flow feature finish V1.0

feature/V1.0 分支的代码会被合并到 develop 里面,然后删除该分支,切换回 develop,此时develop并未推送到远程仓库。需执行git push进行推送。

测试/发布上线,代号1.0

  基于develop,创建测试/发布分支:git flow release start 1.0

注意:这里不会自动推送release/1.0分支到仓库,需执行git push或者publish,这时进行测试就拿这个分支进行。否则分支只是在本地。测试发现bug在此分支进行修改。

完成release 测试:git flow release finish 1.0

自动将代码 merge 到master 和 develop 分支,将本地和远程仓库的release/1.0删除,自动打包

查看tag:git tag 

推送tag至仓库:git push origin  --tags发布tag 1.0上线

◆紧急 bug 修正,代号bug1

基于master,开启热修复分支:git flow hotfix start bug1



注意:自动切换到hotfix/bug1分支,只会在本地创建分支,需要执行git push推送至远程仓库,使用此分支进行测试,发现bug在此分支修改。

测试通过: git flow hotfix finish bug1

推送develop/master分支至远程仓库:git push

查看tag:git tag

推送tag至远程仓库:git

push origin ---tags

git-flow 会依次切换到 master develop 分支下合并 hotfix/bug1,然后删掉 hotfix/bug1。hotfix 完成自动打tag为bug1,需要注意需要单独切换到develop和master分支进行手动git push代码才会到远程仓库,生产发布使用bug1即可

总结:

1、git-flow 的 feature release 都是从develop 分支创建,hotfix support 都是从 master 分支创建。

2、最稳定的代码放在 master 分支上,禁止直接在 master 分支上提交代码,只能代码合并操作。

3、我们日常开发需要从 master 分支拉一条 develop 分支出来,禁止直接在该分支上提交代码,只能合并操作。

4、所有的开发任务都是从 develop分支拉出一条 feature 分支,并手动推送至远程仓库(可选),可以按JIRA任务来创建feature分支,finish之后会把代码合并到本地develop分支、删除该分支。

5、当开发完毕后,此时需要从 develop 分支上拉出一条 release 分支并手动推送至远程仓库,随后将针对 release 分支部署测试环境,测试人员在该分支上进行测试,开发人员在该分支上修改 bug。

6、测试通过无bug 时,我们可将该 release 分支部署到预发环境,再次验证以后,均无任何 bug,此时可将 release 分支部署到生产环境。

7、待上线完成后,将 release 分支上的代码同时合并到本地 develop 分支与master 分支,自动打tag、删除该分支(develop\master\tag都需要手动push到远程仓库)。

8、当生产环境发现 bug 时,我们从master拉出一条 hotfix 分支,并在该分支上做 bug 修复。bug 完全修复后,hotfix分支上的代码同时合并到本地develop 分支与 master 分支、自动打tag、删除该分支(develop\master\tag都需要手动push到远程仓库

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