ToolkitX
知识库工具箱

Git 工作流

Git Flow, GitHub Flow, GitLab Flow

25min·进阶

01. 分支策略的重要性

没有分支策略的团队就是灾难——所有人往一个分支上 commit,代码冲突天天发生,永远不知道哪个版本能发布。分支策略是团队的协作规则。 分支策略解决这几个问题: - 新功能怎么开发?(在哪个分支、怎么合回主线) - 生产环境跑了什么代码?(发布分支还是主分支) - 紧急 bug 怎么修?(怎么绕过正在开发的新功能快速修) - 开发中代码和稳定代码怎么隔离? 常见的三种工作流:Git Flow(最经典但有点重)、GitHub Flow(简单轻量)、GitLab Flow(环境驱动)。选哪种看团队规模和发布节奏。
bash
# 不管哪种工作流,核心分支就两类:
# 长期分支——main/master、develop(一直存在)
# 短期分支——feature、hotfix、release(完成后就删)

# 查看分支
  git branch -a

02. Git Flow——经典企业级工作流

Git Flow 是最经典的分支模型,适合有明确发布周期的项目: 两个永久分支: master/main——只有发布代码,每个 commit 都是一个发布版本(打 tag)。 develop——开发集成分支,所有 feature 合到这里。 三个临时分支: feature/xxx——从 develop 分出,开发完成后合回 develop。 release/x.x.x——从 develop 分出,做发布前的最后测试和修 bug(不改新功能)。完成后合到 master 和 develop。 hotfix/x.x.x——从 master 分出修紧急 bug,完成后合到 master 和 develop。 优点:结构清晰,角色的职责分明。缺点:对持续部署的项目来说太重了——release 分支的存在拖慢了发布节奏。
bash
# Git Flow 分支操作
git checkout -b feature/new-login develop      # 开始新功能
git checkout develop && git merge feature/new-login  # 合回开发
git branch -d feature/new-login               # 删除功能分支

git checkout -b release/1.2.0 develop         # 开始发布准备
git checkout master && git merge release/1.2.0  # 发布到主分支
git tag -a v1.2.0 -m "Release 1.2.0"          # 打版本标签
git checkout develop && git merge release/1.2.0

git checkout -b hotfix/bug-123 master          # 紧急修 bug
git checkout master && git merge hotfix/bug-123
git tag -a v1.1.1 -m "Hotfix 1.1.1"

03. GitHub Flow——简单现代的轻量工作流

GitHub Flow 比 Git Flow 简单得多,适合持续部署的项目: 只有一条主分支 main——始终是可部署的稳定代码。 所有开发在 feature 分支上——从 main 分出来,开发完成后通过 Pull Request 合回 main。 合回 main 后立刻部署——这就是持续部署的理念:main 上的代码总是能发布的。 优势:简单、部署快、适合 SaaS 产品。劣势:缺少 release 流程,修 hotfix 也得走完整的 feature branch 流程,紧急时不够快。 适合:Web 应用、微服务、持续部署的团队。你的代码合并到 main 后立刻自动部署到生产。
bash
# GitHub Flow
git checkout -b feature/new-login main
git add . && git commit -m "feat: new login"
git push origin feature/new-login
# 创建 Pull Request
# Code Review
# Merge to main
# 自动部署(CI/CD)

git checkout main && git pull
git branch -d feature/new-login
GitHub Flow 的核心思想:main 分支永远可以部署。任何 feature 分支都是简短的(一两天内合回),不会长期分叉。

04. Trunk-Based Development(主干开发)

Trunk-Based Development 比 GitHub Flow 更激进——所有人直接往 trunk(main)分支上频繁提交小改动,feature 分支生命周期超短(几小时到一天)。 核心原则: 1. 小批量频繁提交——每天多次合到 main,减少合并冲突。 2. Feature Flag——新功能代码合到 main 但用开关控制是否启用。功能开关不开,代码在生产跑着但用户看不到。 3. 全面的自动化测试——没时间手动测,全靠 CI 保障质量。 4. Pair Programming / Code Review——每个 commit 至少两个人看过。 Google 和 Facebook 用的就是这种模式。对团队要求高——测试、监控、feature flag 基建要到位。小团队基础没做好的话反而容易出问题。
bash
# Trunk-Based 开发
# 开发者 A
git pull origin main
git checkout -b tiny-feature
git commit -m "add partial logic"
git push && create PR && merge  # 几小时内就合回

# 新功能用 feature flag 控制
if (featureFlags.newLogin) {
  // 新代码路径
} else {
  // 旧代码路径
}
Trunk-Based 的精髓是 feature flag——代码可以部署到生产但不启用。新功能在后台悄悄开发测试,确认稳定后一键打开。

05. 选哪种工作流

没有银弹,看场景选: Git Flow——适合有固定发布周期的传统软件(如 App、开源项目)。版本号明确,每次发布有测试期。团队规模中到大。 GitHub Flow——适合持续部署的 Web 应用、SaaS 产品。改了就部署,不需要维护多个发布版本。团队规模不限。 Trunk-Based——适合技术能力强的团队,追求最高发布频率。测试自动化程度高,有成熟的 Feature Flag 体系。小团队谨慎。 混合方案——取各家之长。比如用 Git Flow 的 hotfix 分支理念 + GitHub Flow 的轻量 PR 流程。不用照搬教条。
bash
# 各工作流的标签对比
# Git Flow: master, develop, feature/*, release/*, hotfix/*
# GitHub Flow: main, feature/*
# Trunk-Based: main, tiny-short-lived-branches

# 切换工作流基本就是团队约定,Git 本身不管
# 重要的是大家在同一个规则下协作

知识测验

1/5正确 0

Git Flow 有几个永久分支?

下一节

Git 高级技巧

下一节