让团队不再互相踩脚的
Git 分支协作术
分支规范 · feature 日常开发流 · merge 与 rebase 的本质区别 · 冲突解决实战——配一台「命令 ↔ 图形」同屏对照的 Git Graph 模拟器,把每一条命令在提交图上的效果亲眼看一遍。
💥 先看一场事故:所有人都在同一条线上提交
一个三人小团队,没有任何分支规范,所有人直接往 main 上提交。点击「播放事故」,看看一个再普通不过的周三是怎么失控的:
🌌 分支 = 平行宇宙,但便宜得多
科幻片里的平行宇宙设定是:从某个时间点分裂出一条独立时间线,里面随便折腾,不影响主世界。Git 的分支就是这个设定的工程实现——你从 dev 的某个提交「分裂」出 feature 分支,在里面写半成品、做实验、反悔重来,主世界毫无感知;直到你主动把成果合并回去。
而且它比科幻片便宜:Git 的分支不是代码的副本,只是一个 41 字节的小文件,里面记着「这个分支目前指向哪个提交」。开 100 个分支,仓库也不会大 1KB。
🏷 分支规范:给每条时间线一个职责
main / dev / feature / release / hotfix · 保护分支 · 三大协作模型 · 提交信息规范
🧭 五种分支,各管一段
✍️ 命名规范:让分支名自我介绍
# ✅ 好名字:一眼看懂类型和内容 feature/cart # 购物车功能 feature/order-export # 订单导出 fix/login-crash # 修登录崩溃(有的团队用 bugfix/) hotfix/pay-timeout # 线上支付超时热修 release/2.4.0 # 2.4.0 发布分支 # ❌ 坏名字:三天后没人(包括你)知道是干嘛的 dev2 test temp wang/backup new-branch-final-v3
🛡 保护分支:把规范变成「物理防御」
规范靠自觉是守不住的。托管平台(GitHub / GitLab / Gitee)提供保护分支(protected branch)规则:对 main 和 dev 开启后,任何人(包括管理员)都无法直接 push,代码只能通过 Pull Request / Merge Request 进入,并可强制要求:至少 N 人 Review 通过、CI 全绿、分支必须先同步最新目标分支。第 0 章的事故里,甲丙的两次「顺手 push」在这道门前都会被物理拦下。
⚖️ 三大主流协作模型:没有最好,只有合身
| 维度 | Git Flow | GitHub Flow | Trunk-Based |
|---|---|---|---|
| 长期分支 | main + develop 双主线,外加 feature / release / hotfix | 只有 main,一切改动走短命 feature 分支 | 只有 main(trunk),分支寿命 < 1–2 天甚至直接提交 |
| 发布方式 | 按版本周期发布(release 分支 + tag) | 合并即可部署,随时发布 | 持续部署,配合特性开关隐藏未完成功能 |
| 优点 | 职责最清晰,多版本并行维护从容 | 简单直白,学习成本最低 | 集成最频繁,冲突最小,交付最快 |
| 代价 | 流程重、分支多,小团队易被拖慢 | 多版本维护乏力 | 对自动化测试与 CI 成熟度要求极高 |
| 适合谁 | 按版本发布的中大型团队 / 客户端软件 | 持续部署的 Web 小团队(3–10 人) | 工程文化成熟的大厂 / 高频交付团队 |
本页教学采用最普遍的「简化 Git Flow」:main + dev + feature/hotfix——这是国内多数业务团队的实际形态,也正是你的团队描述的样子。
💬 提交信息也有规范:Conventional Commits
分支管住了「时间线」,提交信息管住「每个节点讲了什么」。Conventional Commits 约定 类型(范围): 描述 的格式,机器可解析(自动生成 changelog、语义化版本),人类可速读:
feat(cart): 支持批量加入购物车 # 新功能 fix(login): 修复验证码过期不提示 # 修 bug docs(readme): 补充本地启动步骤 # 只改文档 refactor(order): 拆分订单状态机 # 重构(不改行为) test(pay): 补支付回调的边界用例 # 只加测试 chore(deps): 升级 axios 到 1.8 # 杂务(构建/依赖等) # 破坏性变更:类型后加 "!",正文里写 BREAKING CHANGE: feat(api)!: 订单接口返回结构改为分页
- main 永远可发布;dev 是集结地;feature 短命隔离;hotfix 从 main 拉、双向合回。
- 分支名 = 类型/描述(feature/cart、fix/login-crash),图形工具会按前缀自动分组。
- 保护分支把规范变成物理防御:main/dev 只进 PR,不接受直接 push。
- Git Flow 重而全、GitHub Flow 轻而快、Trunk-Based 快而险——按团队规模与发布方式选。
- 提交信息用 Conventional Commits:feat / fix / docs / refactor / test / chore。