Git 工作流怎么选:Git Flow / GitHub Flow / GitLab Flow / Trunk-based

工作流的本质,是用「分支策略」换「集成频率」。分支越多越隔离,但集成越晚、冲突越大。没有最好的工作流,只有匹配你团队规模与发布节奏的那一个。

最后更新:2026-10-30

Git 命令速查表 → 撤销三件套 → 合并冲突解决 →

三句话理解工作流

下面先用一张表看差异,再按你的团队情况对号入座。

四种工作流深度对比

维度Git FlowGitHub FlowGitLab FlowTrunk-based
常驻分支main + developmainmain + 环境/发布分支main
分支寿命数天~数周数小时~数天数小时~数天不足 1 天
集成频率低(按发布)高(每个 PR)中高极高(每天多次)
发布模型release 分支打版本合并即部署环境晋升 / 发布分支持续部署
认知负担高(5 类分支)低中低,但纪律要求高
关键前提明确发布窗口main 始终可部署 + CI多环境流水线高测试覆盖 + Feature Flag

Git Flow:分支角色齐全,代价也齐全

五类分支各司其职:

仍值得用的场景:交付物是「版本化产品」(桌面端、SDK、私有化部署),且需要同时维护多个已发布版本。

代价:分支多、合并路径长,develop 与 main 长期分叉,「漏合」和冲突是常态。

GitHub Flow:最小可行模型

只有一条长期分支和一条铁律——main 永远可部署:

git switch -c feat/search main
git push -u origin feat/search      # 开 PR
# 评审通过、CI 绿 → Squash merge → 自动部署
git switch main && git pull

适合:Web 服务、SaaS 等可随时部署的项目。关键约束:CI 是唯一质量闸门,测试不过不许合。

GitLab Flow:在两者之间取平衡

在 GitHub Flow 之上加「环境」或「版本」这一层:

适合:需要多环境灰度,或既要持续交付又要维护旧版本的团队。

Trunk-based:把集成频率拉到最高

所有人向 main 提交,或只用寿命不足一天的短命分支;未完成功能用 Feature Flag 藏起来:

git switch main && git pull --rebase
# 小步提交,随时可发布;功能开关控制是否对外生效

怎么选:一张决策清单

判断标准只有一个:你的团队能多快把分支合回主干。合不回去的分支策略,再「规范」也是负债。

从 Git Flow 迁到主干开发:渐进四步

  1. 先把 CI 补齐:主干必须能自动验证(单测 + 构建 + 冒烟),否则不叫迁移,叫冒险
  2. 缩短分支寿命:把 feature 分支从「数周」压到「数天」,先练小步提交
  3. 引入 Feature Flag:把未完成功能藏起来,允许半成品进主干
  4. 去掉 develop:让 main 成为唯一集成分支,发布改用 tag / 环境晋升

不要一次改完。每步观察一周,出问题就退回上一步——工作流迁移失败,通常是因为测试没跟上就急着删分支。

常见问题

小团队(3~5 人)该用哪个 Git 工作流?

GitHub Flow。只有 main 一条长期分支,改动走短命分支 + PR,合并即部署;不需要 develop、release、hotfix 那一整套。等人多了、发布窗口复杂了,再考虑 GitLab Flow 的环境分支。

Git Flow 真的过时了吗?

不是过时,是不再是默认答案。它对「版本化交付 + 多版本并行维护」仍然合适;但对持续部署的 Web 团队,develop 与 main 长期分叉、合并路径长,成本大于收益。

Trunk-based 必须用 Feature Flag 吗?

只要你会往主干合并「未完成的功能」,就需要。否则要么功能半成品上线,要么被迫开长命分支——后者已经退回 GitHub Flow 了。开关还要求有治理:定期清理、避免嵌套、明确负责人。