Gitflow 工作流实践

89 阅读5分钟

中文版原文:Gitflow 工作流

这里结合实际工作,谈谈 Gitflow 的使用建议。

分支定义

  1. 主分支(mainmaster:记录已发布功能的代码分支,如果生产环境上的功能出问题,从这个分支切出新分支(hotfix)进行修复。
  2. 开发分支(develop:团队协作开发的分支,所有开发中的功能开发完成后,合并到这个分支。
  3. 功能分支(feature/*:由于 develop 分支会频繁更新,为避免干扰,应从 develop 分支中切出一个 feature 分支进行开发(通常一个功能分支只由一人维护),不同的 feature 分支对应不同的相对独立的功能,新增的代码尽量不要重合,避免合并时冲突。涉及较为底层功能的分支应优先合并。功能开发完后,先把 develop 分支最新代码合并到 feature 分支,处理完冲突后,再合并回 develop 分支。合并之后 feature 分支不再保留。
  4. 发布分支(release/*:当前阶段所有功能已经开发完毕,并且自测完毕(或者开发分支中有部分功能需要提前发布),可以从 develop 分支中切出一个 release 分支,进入发布工作,如上线测试服提交给测试团队测试等。release 分支不再新增功能,只修复测试出的问题(这时候开发分支可以同步开发)。当然,如果团队较小(比如没有测试团队),或者不是循环的迭代开发,可以在 develop 分支测试完成后直接发布。
  5. 热修复分支(hotfix/*):用于快速修复生产环境功能问题的分支,从 main 分支切出,直接合并回 main 分支,避免受到正在开发的新功能的代码干扰。
  6. 问题修复分支(bugfix/*:如果一个问题不需要快速修复上线,而是在下个正式版本上线,可以不用在 hotfix 分支上修复,而是从 develop 分支中切出一个 bugfix 分支,完成后再合并回 develop 分支(这种情况与 feature 分支流程一致,只是名字不同)。如果这时候正处在发布阶段,也可以从 release 分支切出,完成后再合并回 release 分支(这种情况与 feature 分支不同,feature 分支不能合并回 release 分支)。要合并回哪个分支可以看改动范围和耗时长短。
  7. 支持分支(support/*:可以视作 main 分支的分叉,需要与生产环境功能不同的并行版本时可以创建一个对应的 support 分支,如给客户演示用的版本。

一般流程

以下流程描述会省略 git commit 等一些常规步骤。

定义分支

git flow init

使用以上命令给各个分支名称进行定义,可以从已有的分支中选择,也可以重新定义。

功能开发

创建 feature 分支:

git flow feature start <功能名称>

以上命令会从 develop 分支上切出 feature 分支。

在合并到 develop 分支前,如果 develop 分支中有新提交,可以先合并到 feature 分支,避免冲突导致关闭失败:

# 在 feature 分支上执行,也可以用 rebase 命令
git merge develop

完成并关闭 feature 分支:

# 在 feature 分支上执行
git flow feature finish

以上命令会将 feature 分支合并到 develop 分支,并删除 feature 分支(包括远程分支)后回到 develop 分支。

功能发布(可选)

创建 release 分支:

git flow release start <版本号>

以上命令会从 develop 分支上切出 release 分支。

修复 release 分支上的 bug:

git flow bugfix start <bufix分支名> [<基础分支>]

以上的”基础分支“如果不填,默认从 develop 分支中切出,如果要从 release 分支上切出,”基础分支“要填上对应的 release 分支名(如 release/0.0.1)。

完成修复:

# 在 bugfix 分支上执行
git flow bugfix finish

以上命令会将 bugfix 分支合并会”基础分支“,”基础分支“是哪个分支取决于切出的时候是基于哪个分支。

完成发布:

# 在 release 分支上执行
git flow release finish [<版本号>]

以上命令会将 release 分支合并到 main 分支和 develop 分支,并将 release 分支(包括远程分支)删除后回到 develop 分支,中间会让你填写合并提交信息和 tag ,tag 格式在执行 git flow init 的时候已经定义号,按默认的填即可。

热修复

创建 hotfix 分支:

git flow hotfix start <修订版本号>

该命令会从 main 分支切出一个 hotfix 分支。

完成修复并关闭:

# 在 hotfix 分支上执行
git flow hotfix finish

以上命令会将 hotfix 分支合并到 main 分支和 develop 分支,并将 hotfix 分支(包括远程分支)删除后回到 develop 分支。

创建支持分支

如需创建支持分支,使用以下命令:

git flow support start <分支名> <基础分支>

以上命令会从”基础分支“上切出 support 分支,”基础分支“一般是 main 分支。

如果想继续在 support 上添加新代码,可以根据需要用以下命令切出对应分支进行开发:

git flow feature start <feature分支名> <基于的support分支名>
git flow release start <版本号> <基于的support分支名>
git flow bugfix start <bugfix分支名> <基于的support分支名>
git flow hotfix start <修订版本号> <基于的support分支名>

以上每个命令后面加上”基于的support分支名“后,关闭分支时,新增的代码只会合并到该 support 分支上,不会影响 develop 分支和 main 分支。