git进阶03_企业分支管理策略

02 - 企业分支管理策略

本章目标:掌握企业中最常用的分支策略,能独立管理功能分支的完整生命周期。


一、为什么需要分支策略?

想象一个场景:

  • 你正在开发新功能
  • 线上突然出了 Bug 需要紧急修复
  • 同事的代码还没 review 完

没有分支策略 :所有人的代码混在一起,互相影响,灾难现场。

有分支策略:各干各的,互不干扰,按规矩来。


二、企业常见的三种分支模型

模型一:Git Flow(适合有发版周期的项目)

复制代码
main (master)       ─────●─────────────────────●─────────●──────
                         │                     ↑         ↑
                         │                 merge     merge
release/v1.0      ───────┼────────●───────●───┘         │
                         │        │       ↑              │
                         │     merge  merge              │
develop           ───●───●────────●───────●──────────────●──────
                     │            │
feature/login     ──●●──────●────┘
                     │      ↑
feature/pay       ──●─────●┘

分支角色:

分支 用途 生命周期
main 生产环境代码,只接受 release 合并 永久
develop 开发集成分支 永久
feature/* 功能开发 临时(完成后删除)
release/* 发版准备 临时
hotfix/* 紧急修复 临时

模型二:GitHub Flow(适合持续交付的项目)--- 企业最常用

复制代码
main          ───●──────●──────●──────●──────●──────●──────
                  ↑      ↑           ↑      ↑
               merge  merge       merge  merge
feature/login ──●──────●───────────┘      │
                                       merge
feature/pay   ─────────────────────────────●

规则极简:

  1. main 分支永远可部署
  2. 所有改动通过 Pull Request 合并
  3. 合并后立即部署

模型三:Trunk-based(适合 DevOps 成熟的团队)

复制代码
main    ───●─────●─────●─────●─────●─────●─────
            ↑     ↑     ↑     ↑     ↑     ↑
         各人直接往 main 提交(用短生命周期分支)

特点:

  • 分支生命周期 < 1 天
  • 依赖 Feature Flag 控制功能上线
  • 对 CI/CD 要求极高

联通产业互联网大概率用 Git Flow 或 GitHub Flow。下面重点讲这两种。


三、Git Flow 完整操作手册

3.1 初始化

bash 复制代码
# 安装 git-flow(Windows 需要额外安装)
# 或者手动操作(推荐,理解更深入)

# 确保 main 分支是干净的
git checkout main
git pull origin main

3.2 开发新功能

bash 复制代码
# ===== 第一步:从 develop 创建 feature 分支 =====
git checkout develop
git pull origin develop

# 创建并切换到新分支
git checkout -b feature/user-login

# ===== 第二步:开发并提交 =====
# 你的代码修改...
git add .
git commit -m "feat(auth): add login page"
git commit -m "feat(auth): add login API"

# ===== 第三步:推送并创建 Merge Request =====
git push -u origin feature/user-login

# 在 GitLab 上创建 Merge Request
# 目标分支:develop
# 审核人:你的 leader

# ===== 第四步:review 通过后合并 =====
# 在 GitLab 点击 Merge(或者 leader 点击)

# ===== 第五步:删除远程分支 =====
git checkout develop
git pull origin develop
git branch -d feature/user-login
git push origin --delete feature/user-login

3.3 发版流程

bash 复制代码
# ===== Release 分支 =====
git checkout develop
git checkout -b release/v1.2.0

# 发版前的最后调整(修 bug、改版本号等)
git commit -m "chore: bump version to 1.2.0"

# 合并到 main
git checkout main
git merge --no-ff release/v1.2.0
git tag -a v1.2.0 -m "Release v1.2.0"
git push origin main --tags

# 合并回 develop
git checkout develop
git merge --no-ff release/v1.2.0

# 清理
git branch -d release/v1.2.0

3.4 紧急修复(Hotfix)

bash 复制代码
# ===== 线上出 Bug 了! =====
# 从 main 创建 hotfix 分支
git checkout main
git checkout -b hotfix/fix-payment-bug

# 修复代码
git add .
git commit -m "fix(payment): fix payment amount calculation"

# 合并到 main 并打 tag
git checkout main
git merge --no-ff hotfix/fix-payment-bug
git tag -a v1.2.1 -m "Hotfix v1.2.1"
git push origin main --tags

# 合并回 develop
git checkout develop
git merge --no-ff hotfix/fix-payment-bug

# 清理
git branch -d hotfix/fix-payment-bug

四、分支命名规范(企业必须遵守)

复制代码
feature/user-login          ← 功能分支
feature/JIRA-123-add-cart   ← 带 Jira 编号的功能分支
bugfix/fix-login-error      ← Bug 修复
hotfix/fix-payment-crash    ← 紧急修复
release/v1.2.0              ← 发版分支
chore/update-dependencies   ← 杂项维护
docs/api-documentation      ← 文档
test/unit-test-login        ← 测试

命名规则:

  • 全小写,用 - 连接
  • 必须带类型前缀(feature/bugfix/ 等)
  • 关联 Jira/Issue 编号(如 feature/JIRA-123-add-cart
  • 简短但有描述性

五、合并方式选择

5.1 merge(保留历史)

bash 复制代码
git checkout develop
git merge --no-ff feature/user-login
复制代码
*   merge commit
|\
| * feature commit 2
| * feature commit 1
|/
* develop commit

优点 :保留完整的分支历史

缺点:历史线会比较乱

5.2 rebase(线性历史)--- 企业推荐

bash 复制代码
# 在 feature 分支上操作
git checkout feature/user-login

# 把 develop 的最新代码变基到你的分支上
git fetch origin
git rebase origin/develop

# 如果有冲突,解决后继续
git rebase --continue

# 推送(需要 force push,因为历史被重写了)
git push --force-with-lease
复制代码
* feature commit 2
* feature commit 1
* develop commit 2
* develop commit 1

优点 :历史干净线性

缺点:需要 force push

5.3 企业选择建议

场景 推荐方式 原因
小团队、功能简单 merge --no-ff 简单直观
大团队、频繁集成 rebase 历史干净,易追踪
公共分支(main/develop) merge 保护历史
个人 feature 分支 rebase 保持同步

六、分支操作速查表

bash 复制代码
# ===== 查看分支 =====
git branch              # 本地分支
git branch -r           # 远程分支
git branch -a           # 所有分支
git branch -v           # 查看各分支最后一次提交

# ===== 创建分支 =====
git branch feature/new-api          # 创建但不切换
git checkout -b feature/new-api     # 创建并切换
git switch -c feature/new-api       # 新语法(推荐)

# ===== 切换分支 =====
git checkout feature/new-api        # 旧语法
git switch feature/new-api          # 新语法(推荐)

# ===== 删除分支 =====
git branch -d feature/old-branch    # 删除已合并的分支
git branch -D feature/old-branch    # 强制删除(未合并)
git push origin --delete feature/old-branch  # 删除远程分支

# ===== 重命名分支 =====
git branch -m old-name new-name
git push origin old-name:new-name
git push origin --delete old-name

# ===== 查看分支图 =====
git log --oneline --graph --all --decorate
# 或用你配置的别名
git lg

七、实战:从零开始一个功能的完整流程

假设你要开发"用户登录"功能,项目用 GitHub Flow。

bash 复制代码
# ===== 1. 同步最新代码 =====
git checkout main
git pull origin main

# ===== 2. 创建功能分支 =====
git checkout -b feature/user-login

# ===== 3. 开发(多次 commit) =====
# 修改 login.html...
git add login.html
git commit -m "feat(auth): create login page layout"

# 修改 login.js...
git add login.js
git commit -m "feat(auth): implement login validation"

# 修改 login.css...
git add login.css
git commit -m "style(auth): add login page styles"

# ===== 4. 同步最新代码(开发期间 develop 有更新) =====
git fetch origin
git rebase origin/main

# 如果有冲突:
# 1. 编辑冲突文件
# 2. git add <冲突文件>
# 3. git rebase --continue

# ===== 5. 推送到远程 =====
git push -u origin feature/user-login

# ===== 6. 在 GitLab/GitHub 创建 Pull Request =====
# - 标题:feat(auth): implement user login
# - 描述:实现用户登录功能,包括表单验证和 API 调用
# - 审核人:@leader

# ===== 7. Code Review 通过后合并 =====
# 在平台上点击 Merge

# ===== 8. 清理 =====
git checkout main
git pull origin main
git branch -d feature/user-login

八、常见错误与解决方案

错误1:在 main 分支上开发了

bash 复制代码
# 解决:把改动移到新分支
git checkout -b feature/my-work    # 在当前位置创建新分支
git checkout main                  # 回到 main
git reset --hard origin/main       # 重置 main 到远程状态

错误2:提交了不该提交的文件

bash 复制代码
# 撤销最后一次提交(保留修改)
git reset --soft HEAD~1

# 撤销暂存(取消 git add)
git reset HEAD <file>

错误3:合并了冲突不知道怎么办

bash 复制代码
# 查看冲突文件
git status

# 冲突标记解释:
<<<<<<< HEAD
你当前分支的代码
=======
别人提交的代码
>>>>>>> feature/xxx

# 解决步骤:
# 1. 手动编辑文件,选择保留哪部分(或都保留)
# 2. 删除冲突标记(<<<<<<< ======= >>>>>>>)
# 3. git add <文件>
# 4. git commit(merge 时)或 git rebase --continue(rebase 时)

九、练习清单

学完本章,请完成以下操作:

  • 创建一个练习仓库,手动走完 Git Flow 的 feature → develop → main 流程
  • 练习 rebase 操作,把一个落后于 main 的 feature 分支变基到最新
  • 制造一次合并冲突并解决它
  • git log --oneline --graph --all 画出分支图
  • 练习删除分支(本地+远程)
  • 按命名规范创建 3 个不同类型的分支

上一章01-Git核心概念与企业环境配置

下一章03-Git工作流实战