原文链接:
很多团队真正的问题通常是分支语义不清:
master 到底是不是线上版本develop 里有没有未上线代码Gitflow 的价值就在于把这些角色说清楚,特别适合发版周期明确、上线窗口固定、测试周期较长的团队。
| 分支 | 作用 |
|---|---|
master / main |
与线上生产版本保持一致 |
develop |
日常开发集成分支 |
feature/* |
功能开发分支 |
release/* |
特定版本测试和发布准备 |
hotfix/* |
线上紧急问题修复 |
基本约定是:不要直接修改主线和开发集成分支,功能、发布、修复都通过对应分支完成。
develop -> feature/x -> develop -> release/1.2.0 -> main -> tag
操作含义:
develop 创建 feature/xdevelopdevelop 创建 release/*release/*release/* 合入 main 并打 tagrelease/* 的修复回合到 develop线上问题优先从生产基线创建 hotfix/*:
main -> hotfix/1.2.1 -> main -> tag
\-> develop
关键点:
developdevelop 里已有未上线代码,但要紧急上线一个小功能这时不要直接从 develop 拉分支,因为它可能带出不该上线的内容。
更稳的做法是从 main 或生产 tag 创建分支,完成后按 hotfix 或紧急 release 的方式发布,再把变更同步回 develop。
最好在需求拆分阶段提前识别依赖。
如果已经拆开,团队要尽快决定合并为一个 feature 分支,或者明确一个公共基础分支,避免两个分支长期互相 cherry-pick。
本地整理提交可以使用 rebase。
一旦分支已经发布到公共仓库,尤其已有其他人基于它继续开发,就不要随意 rebase 后强推。
适合:
不适合:
Gitflow 的重点是约束:
如果团队采用 Gitflow,最好把这些规则写进团队规范,并用分支保护、PR 模板、CI 检查减少人工遗漏。