GitFlow 是什么
GitFlow 是 Vincent Driessen 在 2010 年提出的分支模型:长期维护两条分支 main 与 develop,前者只承载已发布状态,后者承载集成中的开发;配合 feature、release、hotfix 三类短分支按需切出与合回。它用分支把「发布」这件事显式化,因此适合有明确版本节奏、需要同时维护多条发布线的产品。合并时常用 --no-ff 保留分支聚合痕迹,让历史能看出每次功能落地。
基本信息
| 长期分支 | main(发布线)、develop(集成线) |
|---|---|
| 短分支 | feature / release / hotfix |
| 合并风格 | --no-ff 保留每次合并的独立提交 |
| 适用 | 有版本发布节奏、需并行维护多版本的产品 |
| 平台 | 纯分支约定,任何 Git 托管平台可用 |
典型使用场景
- 产品按版本发布,需要冻结范围后再统一测试
- 同时维护多个历史版本,需要隔离修复线
- 需要清晰看到每个功能被整体合并进主线的痕迹
- 上线前的准备(版本号、打包、回归)需要一个独立分支承载
- 紧急线上缺陷需要绕过开发分支直接走修补流程
- 需要为新加入的成员提供一套明确的分支命名与流转规范
常用示例
常用示例
git switch -c develop # 建集成分支
git switch -c feature/login develop # 从 develop 切功能分支
git switch develop && git merge --no-ff feature/login # 合回并保留合并点
git switch -c release/1.3.0 develop # 冻结发布范围
git switch main && git merge --no-ff release/1.3.0 # 发布线合并
git tag -a v1.3.0 -m 'release 1.3.0'各分支的职责
| 分支 | 职责 |
|---|---|
| main | 只保留已发布状态,每个提交对应一个可发布版本 |
| develop | 集成中的开发内容,功能合入此处 |
| feature/* | 单个功能或任务,从 develop 切出并合回 |
| release/* | 冻结发布范围,只接受修复 |
| hotfix/* | 从 main 切出,修复后同时合回 main 与 develop |
模型出自 Vincent Driessen 2010 年的文章,作者后来补充了适用条件与替代方案的说明:并非所有团队都需要这套完整模型,发布频率越高,它的开销越明显。