Git Flow 工作流完全指南

小飞兽 工具&效率 249 次阅读 2026-05-15

概述

Git Flow 是一套基于 Git 的分支管理模型,由 Vincent Driessen 在 2010 年提出并被广泛采用。它通过为不同类型的开发任务分配固定用途的分支,使团队协作更加有序,特别适合有固定发布周期的大型项目。本文详细介绍 Git Flow 的完整工作流程、各分支的职责以及在实际团队中的最佳实践。

基础语法

Git Flow 的核心是将开发活动拆分到不同类型的分支中,每种分支都有明确的职责范围:

    • main/master:生产环境分支,仅存放经过测试的正式发布版本,任何时候都应保持可发布状态。
    • develop:开发主分支,汇集了所有已完成的特性(feature)分支,是下一版本开发的基础。
    • feature/*:特性分支,从 develop 分支创建,用于开发新功能,完成后合并回 develop。
    • release/*:发布分支,从 develop 创建,用于发布前的最后调整和 Bug 修复,只能合并到 main 和 develop。
    • hotfix/*:热修复分支,从 main 创建,用于紧急修复生产环境的 Bug,完成后同时合并到 main 和 develop。

    Git Flow 的核心命令遵循固定格式:feature 分支从 develop 创建,完成后合并回 develop;release 分支从 develop 拉出,准备发布;hotfix 分支从 main 拉出,修复完成后双向合并。

    完整代码示例+注释

    以下示例演示完整的 Git Flow 开发流程,从开发新功能到正式发布:

    # === 1. 开始一个新特性 ===
    

    从 develop 创建特性分支

    git checkout develop git pull origin develop git checkout -b feature/user-authentication

    === 2. 开发完成后,合并到 develop ===

    git checkout develop git pull origin develop

    使用 --no-ff 保留分支合并历史,便于追溯

    git merge --no-ff feature/user-authentication git push origin develop

    删除已合并的特性分支

    git branch -d feature/user-authentication

    === 3. 准备发布版本 ===

    从 develop 创建发布分支

    git checkout develop git pull origin develop git checkout -b release/v1.2.0

    在发布分支上修改版本号、更新日志等

    修复发布分支上的小问题(不要引入新特性)

    git commit -m "fix: update version to 1.2.0"

    === 4. 完成发布 ===

    合并到 main

    git checkout main git pull origin main git merge --no-ff release/v1.2.0 git tag -a v1.2.0 -m "Release version 1.2.0" git push origin main --tags

    合并回 develop

    git checkout develop git merge --no-ff release/v1.2.0 git push origin develop

    删除发布分支

    git branch -d release/v1.2.0

    === 5. 紧急热修复 ===

    从 main 创建热修复分支

    git checkout main git pull origin main git checkout -b hotfix/critical-security-fix

    修复完成后直接合并到 main 和 develop

    git checkout main git merge --no-ff hotfix/critical-security-fix git tag -a v1.2.1 -m "Hotfix version 1.2.1" git push origin main --tags

    git checkout develop
    git merge --no-ff hotfix/critical-security-fix
    git push origin develop

    git branch -d hotfix/critical-security-fix

    运行效果

    使用 Git Flow 后,仓库的分支结构会非常清晰。在 git flow init 初始化后,每次开发新功能都在独立的 feature 分支上进行,不会污染主开发线。当一个版本的所有特性都完成并合并到 develop 后,从 develop 拉出 release 分支进入发布准备阶段,此时 develop 可以继续接收下一个版本的特性开发。

    在代码审查平台(如 GitLab/GitHub)上,每个合并请求(MR/PR)都会清楚地显示该分支的目的(新增特性、Bug修复还是热修复),审核者可以更有针对性地提出意见。最终的发布版本通过 tag 标记,配合 CI/CD 流水线可以实现自动化构建和部署。

    常见问题

    Q1:特性分支合并时出现冲突怎么办
    当 merge 时出现冲突,Git 会暂停并标记冲突文件。首先打开冲突文件,Git 用 <<<<<<< 和 >>>>>>> 标记了冲突区域,手动保留或合并需要的代码后删除标记符号。然后 git add 标记为已解决,再执行 git commit 完成合并。如果冲突复杂,建议与相关开发者沟通后再处理。

    Q2:发布分支和特性分支能否同时开发
    完全可以。release/v1.2.0 在做发布准备的同时,develop 分支上的其他开发者可以继续在 feature/* 分支上开发下一个版本的特性。两者互不干扰,只是在合并回 develop 时注意不要把未完成的特性带进去。

    Q3:hotfix 分支合并时 develop 已经领先很多怎么办
    热修复通常涉及冲突较少的安全补丁,合并时可能需要手动解决少量冲突。冲突解决后分别提交到 main 和 develop 即可。由于 develop 已经包含很多新代码,hotfix 只携带必要的修复,冲突范围可控。如果冲突严重,考虑在 develop 上重新应用修复。

    Q4:Git Flow 流程太重,小团队是否值得使用
    对于 3 人以下的小团队或短期项目,Git Flow 的全部分支类型可能过于复杂。可以简化使用:只用 main + feature 分支,甚至直接采用 GitHub Flow(始终从 main 创建特性分支,审核后合并回 main)。流程是为团队服务的,适度裁剪是合理的。

    延伸阅读

    • git-flow 工具:提供 git flow 命令简化操作,不必记忆每条分支合并命令,适合不习惯纯命令行的开发者。
    • GitLab Flow:在 Git Flow 基础上简化了发布分支,强调上游优先(upstream first)的持续发布理念,适合 SaaS 类产品。
  • Atlassian Git 教程:提供了各种 Git 工作流的对比分析,帮助团队选择最适合的分支策略。