首页/开发/Git 与协作速查/GitFlow 分支模型

GitFlow 分支模型

经典模型:长期维护 main 与 develop,配合 feature/release/hotfix 短分支;合并常用 --no-ff 保留分支聚合痕迹。

Git 与协作速查开发更新于 2026-10-13

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 年的文章,作者后来补充了适用条件与替代方案的说明:并非所有团队都需要这套完整模型,发布频率越高,它的开销越明显。

易错点

  • 持续部署团队直接套用会背上多余的合并与发布分支开销,先评估发布节奏再选模型
  • hotfix 修完只合回 main 而忘了同步回 develop,下个版本缺陷会复发
  • release 分支存在时间过长会与 develop 严重分叉,冻结期应尽量短
  • 长期分支上的合并提交堆积会让历史难以阅读,合并信息要写清来源分支与版本
  • --no-ff 用错场合会给线性主干制造大量噪音,主干要求线性时改用变基或压缩合并

数据来源与参考

  • Vincent Driessen《A successful Git branching model》(nvie.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌