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