Git Flow工作流程

Git Flow工作流程

1.使用背景

在多组员,多项目等环境进行协同工作时,如果没有统一规范、统一流程,则会导致额外的工作量,甚至会做无用功。所以要减少版本冲突,减轻不必要的工作,就需要规范化的工作流程。

2.使用总则

  • 统一使用Git作为版本管理工具。
  • 统一GitFlow流程管理控制版本。

3.分支

git-flow的分支流程图

  • 天蓝色圆点所在的线为我们源码的主线(master)。
  • 天蓝色方形指向的节点就是每一个发布版本的标签(tag)。
  • 紫色圆点所在的线为主要分支线(develop)。
  • 橙色圆点所在的线为新功能开发分支线(feature)。
  • 绿色圆点所在的线为新版本发布线(release)。
  • 红色圆点所在的线为发布版本bug修复线(hotfix)。

长期分支 & 辅助分支

  • git-flow流程中最主要的五个分支分别为master,release,develop,feature,hotfix。
  • 长期分支:master,develop。
  • 辅助分支:release,feature,hotfix。、
  • 长期分支是相对稳定的分支,所有被认可的提交最终都要合并到这两个分支上。
  • 辅助分支是工作需要临时开的分支,在完成他们的工作之后通常是可以删除的。

分支概述

  • master:对外发布产品使用的分支,该分支的提交必须是最接近对外上线的版本,不允许在该分支上进行开发,要始终保持该分支的稳定。
  • develop:内部开发产品所用的分支,该分支的最新提交必须是一个相对稳定的测试版本,同样地,不允许在该分支上面进行开发
  • feature:新功能分支,每个新的功能都应该创建一个独立的分支,从develop分支派生出来,功能开发完成之后合并到develop分支,不允许功能未开发完成便合并到develop分支
  • release:发布前的测试分支,一旦开发的功能满足发布条件或者预定发布日期将近,应该合并所有的功能分支到develop分支,并在develop分支开出一个release分支,在这个分支上,不能在添加新的功能,只能修复bug,一旦到了发布日期,该分支就要合并到master和develop分支,并且打出版本的标签。
  • hotfix:修复分支,在master上创建的分支,用于对线上的bug的修复,修复问题后,它应该合并回master和develop分支,然后在master分支上打一个标签。


3.开发流程

3.1 创建远程仓库,并拉到本地

创建远程仓库的时候默认是创建master分支的,因此拉下来的项目也处于master分支。

$ git clone ...

3.2 创建develop分支

因为master分支上面是不允许进行开发的,创建长期开发分支develop

//创建方式一
//远程仓库先创建分支,再本地创建分支,并关联远程分支
//实现方式一
$ git checkout -b develop
$ git branch --set-upstream develop/origin develop
//实现方式二
$ git checkout -b develop origin/develop //创建的同时就关联远程仓库
//如果报错,执行下面命令,在输入该命令
$ git fetch 
//实现方式三
git fetch origin develop:develop
git branch --set-upstream-to=origin/develop develop
//创建方式二
//本地创建分支,再推送到远程仓库
$ git checkout -b develop
$ git push origin develop:develop
  • 开发负责人本地创建develop分支,并推送到远程。
  • 其他团队人员克隆后拉取develop分支,此时建议采用实现方式三拉取下来,本地创建分支并关联远程仓库。

3.3 开发新功能

  • 假如开发新功能a,在develop分支创建新功能分支a
$ git checkout develop
$ git checkout -b feature/a
  • 如果有必要,将该功能分支推送到远程
$ git push origin feature/a:feature/a
  • 如果有必要,成员可将该分支拉下来
$ git fetch origin feature/a:feature/a

3.4 完成新功能

  • 新功能完成之后需要将feature分支合并到develop分支,并push到远程仓库(在push之前,建议先pull一下,将本地的develop分支内容更新到最新版本,再push,避免线上版本与你commit时候文件内容产生冲突)
$ git checkout develop
//-no-ff 参數可以保存feature/a分支上的历史记录
$ git merge --no-ff feature/a
$ git push origin develop
  • 合并完成之后,确定该分支不再使用,则删除本地和远程上的该分支
$ git branch -d feature/a
$ git push origin --delete feature/a

3.5 测试新版本

当新功能基本完成之后,我们要开始在release分支上测试新版本,在此分支上进行一些整合性的测试,并进行小bug的修复以及增加例如版本号的一些数据。版本号根据 master 分支当前最新的tag来确定即可,根据改动的情况选择要增加的位

  • 开发布分支
//在develop分支中开
$ git checkout -b release/1.2.0
//将分支推送到远程(如果有必要)
$ git push origin release/1.2.0:release/1.2.0
  • 保证本地的release分支处于最新状态
//将本地的release分支内容更新为线上的分支
$ git pull origin release/1.0.0
  • 制定版本号
//commit 一個版本,commit的信息为版本升到1.2.0」
//git commit -a相当于git add . 再git commit
$ git commit -a -m "Bumped version number to 1.2.0"
  • 将已制定好版本号等其他数据和测试并修复完成了一些小bug的分支合并到主分支
//切换至主要分支
$ git checkout master
//将release/1.2.0分支合并到主要分支
$ git merge --no-ff release/1.2.0
//上tag
$ git tag -a "1.2.0" HEAD -m "新版本改动描述"
  • 将release分支合并回开发分支
//切换至开发分支
$ git checkout develop
//合并分支
$ git merge --no-ff release/1.2.0
  • 推送到远程仓库
//将开发分支推送到远程
$ git push origin develop
//将master分支推送到远程
$ git push origin master
  • 删除分支
$ git branch -d release/1.2.0
$ git push origin --delete release/1.2.0

3.6 修补线上Bug

  • 此修复bug针对的是线上运行的版本出现了bug,急需短时间修复,无法等到下一次发布才修复,区别于开发过程中develop上的bug,和测试过程中的release上的bug,这些bug,在原分支上改动便可以。
  • 在master根据具体的问题创建hotifix分支,并推送到远程
git checkout master
git checkout -b hotfix/typo
git push origin hotfix/typo:hotfix/typo
  • 制定版本号,一般最后位加1
//commit 一個版本,commit的信息是版本跳
$ git commit -a -m "Bumped version number to 1.2.1"
  • 修正后commit并将本地的hotfix分支更新为线上最新的版本
$ git commit -m "..."
$ git pull origin hotfix/typo
  • 将刚修复的分支合并到开发分支和主分支
//切换到开发分支
$ git checkout develop
//合并
$ git merge --no-ff hotfix/typo
//切换到主要分支
$ git checkout master
//將hotfix分支合并到主要分支
$ git merge --no-ff hotfix/typo
//上tag
$ git tag -a "1.2.1" HEAD -m "fix typo"
  • 删除修补分支

4.命名约定

  • 主分支名称:master
  • 主开发分支名称:develop
  • 新功能开发分支名称:feature-.../feature/...,其中...为新功能简述
  • 发布分支名称:release-.../release/...,其中...为版本号。
  • bug修复分支名称:hotfix-.../hotfix/...,其中...为bug简述。

5.附加Git的冲突

  • 当我们需要将本地的分支push到远程的时候,举例:当我们新功能开发完成之后,我们合并到develop分支,要将develop分支push到远程的时候,此时如果远程的develop分支的内容有更新,我们就需要使用git pull命令将本地的develop分支更新到最新的版本,再推送,否则会产生冲突,无法推送。
  • 第一种情况下的pull操作可能也会产生冲突,如果我们本地修改和新commit的内容修改了同一个文件同个位置,此时就应该进行开发者间协商。
  • 当我们合并分支的如果两个分支同时修改了同个文件同个位置时候也会产生冲突,此时需要进行手动解决冲突。

欢迎关注本人博客:https://allen-yu.com/

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

推荐阅读更多精彩内容

  • 引言 编写的目的 -通过规范化的流程,使得产品、开发与测试等各个部门更高效的协同工作。-通过规范化的流程使得产品高...
    一忆阅读 34,907评论 12 87
  • 引言 编写的目的 -通过规范化的流程,使得产品、开发与测试等各个部门更高效的协同工作。-通过规范化的流程使得产品高...
    j春雨阅读 424评论 0 1
  • 1.git-flow 说明 一旦安装安装 git-flow,你将会拥有一些扩展命令。这些命令会在一个预定义的顺序下...
    YanniLiu阅读 1,872评论 0 3
  • Git Flow 是什么 Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项...
    侠骨痴梦阅读 522评论 0 2
  • Git分支管理 master:主分支,当前分支上的代码随时可以直接发布,并且只能通过Pull Request从其他...
    UEUEO阅读 9,580评论 5 33