Git 分支模型(一):Git Flow

1、什么是分支模型

在团队协作中,代码管理离不开分支。但分支怎么建、怎么合、什么时候发版,如果没有一套约定,很快就会乱成一团。分支模型就是团队对分支管理方式的一种约定——规定哪些分支是长期存在的、分支之间如何合并、发布流程怎么走。

Git 本身只是一个工具,它没有强制你必须怎么用。真正决定协作效率的,是团队选择的分支模型。

常见的分支模型有四种:Git Flow、GitHub Flow、GitLab Flow 和 Trunk-Based Development。本系列将逐一介绍它们的特点和适用场景。

2、Git Flow 概述

Git Flow 由 Vincent Driessen 在 2010 年提出,是最早、也是最经典的分支模型。它定义了一套严格的分支管理规则,适合有固定发布周期的项目。

Git Flow 定义了两种长期分支和三种短期分支:

长期分支(始终存在):

  • main(或 master:存放随时可以发布到生产环境的代码。每次合并到 main 都意味着一个新版本发布。
  • develop:开发主线,所有功能分支都从这里拉出,完成后也合并回这里。

短期分支(用完即删):

  • feature/xxx:功能分支,从 develop 拉出,开发完成后合并回 develop
  • release/x.x.x:发布分支,从 develop 拉出,用于发布前的测试和 bug 修复,完成后合并到 maindevelop
  • hotfix/x.x.x:热修复分支,从 main 拉出,紧急修复生产环境 bug,完成后合并到 maindevelop

3、工作流程

main:    v1.0 ───────────────────────────── v1.0.1 ────────── v1.1
          │                                    ▲                ▲
          │ hotfix/1.0.1 ──────────────────────┘                │
          │                                                     │
develop:  ├── v1.0 ──────────────────────────────┬──────────────┤
          │          \                \           │              │
          │     feature/A ────────────┐          │              │
          │                     feature/B ────────┤              │
          │                                      │              │
          │                         release/1.1 ─┘              │

功能开发(feature)

# 从 develop 拉出功能分支
git checkout -b feature/user-login develop

# 开发完成后合并回 develop
git checkout develop
git merge --no-ff feature/user-login
git branch -d feature/user-login

--no-ff 表示禁用快进合并,始终创建一个合并提交,这样在历史中能清楚地看到一个功能分支的起点和终点。

发布流程(release)

# 从 develop 拉出发布分支
git checkout -b release/1.1.0 develop

# 在 release 分支上只做 bug 修复,不改功能
# 修复完成后合并到 main 和 develop
git checkout main
git merge --no-ff release/1.1.0
git tag -a v1.1.0 -m "Release v1.1.0"

git checkout develop
git merge --no-ff release/1.1.0

git branch -d release/1.1.0

热修复(hotfix)

# 从 main 拉出热修复分支
git checkout -b hotfix/1.0.1 main

# 修复 bug 后合并到 main 和 develop
git checkout main
git merge --no-ff hotfix/1.0.1
git tag -a v1.0.1 -m "Hotfix v1.0.1"

git checkout develop
git merge --no-ff hotfix/1.0.1

git branch -d hotfix/1.0.1

热修复和发布分支的区别在于:热修复从 main 拉出(生产环境紧急修复),发布分支从 develop 拉出(按计划发布)。

4、适用场景

Git Flow 适合以下场景:

  • 有固定发布周期:比如每月发一个版本,或者每两周一个迭代。
  • 多版本并行维护:需要同时维护多个线上版本(如 v1.0、v2.0)。
  • 团队规模较大:多人协作,需要严格的分支管理规范。
  • 传统软件交付:客户端软件、SDK 等需要明确版本号的项目。

5、Git Flow 工具

除了手动执行上面的命令,也可以使用 git-flow 扩展工具简化操作:

# 安装 git-flow(Windows 自带 / macOS: brew install git-flow)
git flow init          # 初始化,设置分支前缀
git flow feature start user-login   # 创建功能分支
git flow feature finish user-login  # 完成功能分支(自动合并到 develop)
git flow release start 1.1.0        # 创建发布分支
git flow release finish 1.1.0       # 完成发布(自动合并到 main 和 develop、打 tag)
git flow hotfix start 1.0.1         # 创建热修复分支
git flow hotfix finish 1.0.1        # 完成热修复

6、优缺点

优点:

  • 规则清晰,每个分支的职责明确
  • 适合有固定发布周期的项目
  • 分支历史可追溯,方便回顾

缺点:

  • 分支类型多,操作繁琐,小团队会觉得沉重
  • 发布流程长,不适合持续部署
  • developmain 长期存在,容易产生大量合并提交

7、总结

Git Flow 是一套严谨的分支管理模型,它把软件开发中的不同阶段(开发、测试、发布、热修复)映射到不同的分支上,让整个流程有章可循。如果你的团队有明确的版本发布节奏,Git Flow 是一个不错的选择。

但它的复杂度也是显而易见的。下一篇文章,我们来看看更轻量的 GitHub Flow

每天前进一小步,就是一个新的高度!

作者:唐明

出处:/post/git-flow

版权:本站使用"CC BY 4.0"创作共享协议,转载请在文章明显位置注明作者及出处。

关注微信公众号

DevOps持续交付公众号ID:devopscd