git flow使用经验

分支构成

  • master 与线上版本保持绝对一致
  • develop 开发分支,由下文提到的release, feature, hotfix分支合并过后的代码
  • feature 实际功能点开发分支,建议每个功能新建一个feature, 具有关联关系的功能公用一个feature分支
  • release 每一次开发完成之后,从develop创建出来的分支
  • hotfix 修复线上bug分支

master

代码来源

  • release finish之后,会合并代码到master分支
  • hotfix finish之后,会合并代码到master分支
    即,代码来自release和hotfix分支

说明

任何时候,都不要直接修改master分支,且master分支一定是线上的代码

develop

代码来源

  • feature finish之后,会合并代码到develop分支
  • release finish之后,会合并代码到develop分支
  • hotfix finish之后,会合并代码到develop分支

存在目的

始终保存最新开发完成以及修改bug之后的代码,作为最完整的代码基线

作为其他feature的基线

说明

最好不要直接修改develop分支,而是通过其他三类分支的finish。

feature

分支来源

当开始新功能时,由start feature,以develop分支为base,创建新分支

代码来源

由开发者提交开发中的代码

存在目的

由于多个功能需要同时开发,但上线时间不同,则需按功能将代码分开,在适当的时候finish以合并到develop分支

并release,进入测试状态

release

当一组feature开发完成,finish合并到develop分支之后,开始进入提测阶段,则start release,创建release分支

以release分支代码为基准提测,测试过程中若存在bug需要修复,则直接由开发者在release分支修复并提交

测试完成之后,finish release,合并代码到master和develop分支,此时master为最新代码,用作上线,release分支

被自动删除。

注意:合并到develop分支时,可能由于在release过程中有新的feature合并到develop中而导致冲突,解决冲突即可

hotfix

用作修复线上bug,以master为基线start hotfix, 修复完成后,finish hotfix,此时hotfix分支代码会被自动合并到

master和develop分支,hotfix分支被自动删除

一些特殊情况

develop已存在一些未上线的feature代码, 此时需要紧急上线一个新功能, 但develop的代码不能上

两种方法

方案一:

以master为基线start feature, 在finish feature之后,代码会自动合并到master,但不会自动合并到develop,所以为了

保证develop是最新代码,需要手动从master合并到develop分支。

方案二:

将需要紧急上线的功能视为一个bug,start 一个hotfix分支,在hotfix分支被finish之后,代码会自动合并到master和develop分支

显然方案二要更加方便一些

以develop为基线创建了f1和f2两个feature分支之后, f1, f2开发一半的时候发现两个分支代码需要有依赖怎么办?

最好在开发开始前确定两个功能是否相关,若相关则只创建一个分支,两个功能在一起开发.若出现上边的情况,则可手动将f2分支代码

合并到f1上,删除f2分支代码,然后一起在f1上开发

feature分支可以以任何分支为基线, 同时finish的时候,会合并到基线分支

所以问题在于,若f1以develop为基线,f2以f1为基线,那么必须先finish f2,再finish f1.

若反过来,先finish f1,代码合并到develop,f1被删除, 再finish f2, 会由于找不到f1而报错

补救办法就是手动将f2的代码merge到develop,再手动删除f2分支

权限问题

建议master和develop分支设为protected branch, 仅允许项目的master push代码,而developer不允许push,可有效避免错误提交代码的问题

start feature和start hotfix可由developer来操作,而finish feature, finish hotfix, start release, finish release 由master来操作

以避免代码管理的混乱

文章目录
  1. 1. 分支构成
    1. 1.1. master
      1. 1.1.1. 代码来源
      2. 1.1.2. 说明
    2. 1.2. develop
      1. 1.2.1. 代码来源
      2. 1.2.2. 存在目的
      3. 1.2.3. 说明
    3. 1.3. feature
      1. 1.3.1. 分支来源
      2. 1.3.2. 代码来源
      3. 1.3.3. 存在目的
    4. 1.4. release
    5. 1.5. hotfix
  2. 2. 一些特殊情况
    1. 2.1. develop已存在一些未上线的feature代码, 此时需要紧急上线一个新功能, 但develop的代码不能上
      1. 2.1.1. 方案一:
      2. 2.1.2. 方案二:
    2. 2.2. 以develop为基线创建了f1和f2两个feature分支之后, f1, f2开发一半的时候发现两个分支代码需要有依赖怎么办?
    3. 2.3. feature分支可以以任何分支为基线, 同时finish的时候,会合并到基线分支
  3. 3. 权限问题
,