第 24 天:团队流程——分支规范(feat/fix/chore)、commit 规范、review/merge、release 与 SemVer

SDD+Harness 四周学习计划 · Week 4 · Day 24

Posted by LSG on September 2, 2026

SDD + Harness 四周学习计划 · Week 4 · Day 24(全计划第 24 课)

今日主题:团队流程:分支规范(feat/fix/chore)、commit 规范、review/merge、release 与 SemVer

建议用时:60–90 分钟 | 前置:Day 23 的 commands 与 config.sh + Day 13 的 hook 实操

输出物:一页纸《团队 Git 协作规范》(分支 / commit / review / merge / release 五块)


0. 一句话剧透

Day 23 你固化了”单次开发怎么走”,今天往上加一层:多人协作时仓库怎么流转。sdd-harness 给了一套很克制的规范——从 develop 切分支、命名 type/short-description、squash merge 回 develop、main 只做发布、release/vX.Y.Z 流程。今天把这条链走通,并搞懂 pre-commit hook 的分支豁免为什么和分支规范是配套的:分支名是 hook 判断”该不该查 spec”的唯一线索。


1. 今日目标(学完你能做到)

  • 能画出 develop / feature / main / release 四条分支的生命周期
  • 能说出分支命名规范(type/short-description)和 type 的合法集合(feat/fix/chore/docs/hotfix)
  • 能讲清 squash merge 解决什么问题、main 为什么只做发布
  • 能说清 release/vX.Y.Z → tag → back-merge 的完整流程与 SemVer 三段号规则
  • 完成动手练:写一页纸《团队 Git 协作规范》

2. 学习动线

步骤 内容 用时
1 精读「3」:分支规范与 hook 豁免的配套 15 分钟
2 精读「4」:commit 规范(type/short-description + spec-first) 10 分钟
3 精读「5」:review/merge(书面审查 + squash merge + main 只发布) 20 分钟
4 精读「6」:release 流程与 SemVer 15 分钟
5 动手练「7」:写一页纸规范 15 分钟
6 自测「8」+ 打卡 10 分钟

3. 分支规范

3.1 四条分支各自干什么

分支 用途 谁在上面动
develop 集成分支,日常合入目标 团队所有人(经 squash merge)
feat/(feature/ 功能开发,从 develop 切出 开发者个人
fix/* chore/* docs/* hotfix/* 修复 / 杂务 / 文档 / 紧急修复 开发者个人
main 只做发布,不接受直接提交 发布者
release/vX.Y.Z 发布准备分支 发布者

3.2 为什么 hook 豁免和分支规范是配套的

Day 13 的 hook 行为回顾:feat/* 或 feature/* 分支上改代码但不碰 .ai/specs/ 或 .ai/adrs/ → 提交被拒;chore/* docs/* fix/* hotfix/* 豁免;SH_SDD_SKIP=1 显式例外且 shell 历史留痕。

含义很清晰:

  • feature 分支 = 功能变更 = 必须带 spec(spec-first 的落地点)
  • chore/fix/docs/hotfix 分支 = 非功能性或紧急变更 = 豁免

这套规则只有建立在”大家按规范起分支名”之上才成立——分支名是 hook 判断意图的唯一线索。 你起个 abc 分支干功能开发的活,hook 既不拦也不豁免,规范就失效了。

3.3 命名规范:type/short-description

示例:feat/user-loginfix/pagination-off-by-onechore/update-depsdocs/readme-zhhotfix/refund-npe

  • type:feat / fix / chore / docs / hotfix(与 hook 豁免集合对齐)
  • short-description:短横线分隔,≤3–4 个词,描述意图不描述过程

4. commit 规范

4.1 格式

1
<type>/<short-description>: 一句话说明

示例:feat/user-login: 实现邮箱+密码登录接口并返回 token

4.2 spec-first 提交

功能分支上,spec 与代码同一批提交(Day 13 练过):先有 .ai/specs/<功能>.md,再有代码。这样任何一次 checkout 都能看到”这份代码的契约”。

4.3 commit 粒度

一个 commit 一个逻辑变更;避免”实现 + 顺手改格式 + 修了个 typo”混在一个 commit——review 时说不清。AI 生成的代码尤其要检查这一点。


5. review / merge

5.1 书面审查

review 不是口头”我看了”,要留记录:审查人、日期、结论(approve / request-changes)、遗留问题。对应 Day 23 的 review.md command;Day 25 会专门展开”书面”二字的分量。

5.2 squash merge:为什么”压扁”

功能分支上可能有十几个小 commit(AI 生成尤其如此),直接合入 develop 会让历史变成噪音。squash merge 把它们压成一个 commit 合入 develop——develop 历史 = 一条条”完整功能”,回滚时以功能为单位,而不是在一堆碎片里找。

5.3 main 只做发布

main 不接受开发提交,只有 release 流程能碰它 → main 永远处于可发布状态,这是”main 保护”的核心。


6. release 与 SemVer

6.1 release/vX.Y.Z 流程(sdd-harness 规范)

  1. 从 develop 切 release/vX.Y.Z
  2. 在 release 分支上只做发布准备(版本号、changelog、回归),不做新功能
  3. squash merge 到 main
  4. 打 tag vX.Y.Z
  5. back-merge 回 develop(把版本号等变更同步回去,避免 develop 落后)

6.2 SemVer 三段号

主版本.次版本.修订号(如 1.4.2):

什么时候升 示例场景
主版本 不兼容的 API 变更 删接口、改请求语义
次版本 向后兼容的功能新增 加字段、加接口
修订号 向后兼容的缺陷修复 修 bug、修文案

一句话记忆:破坏性改动升主版,新功能升次版,修 bug 升修订版。


7. 动手练(约 15–20 分钟)

写一页纸《团队 Git 协作规范》(Markdown,可放进你的 .ai/CONTEXT.md 或单独 docs/):

  • 分支规范:四条分支职责 + 命名 type/short-description + hook 豁免对照表
  • commit 规范:格式 + spec-first + 粒度
  • review/merge:书面审查要求 + squash merge + main 保护
  • release:vX.Y.Z 六步 + SemVer 规则
  • 用 3–5 个真实 commit 消息做示范

打卡:文件存盘。Day 26 大作业将按这份规范实际走一遍。


8. 自测题

  1. 四条分支各自干什么?main 为什么不接受开发提交?
  2. 分支命名 type/short-description 中,type 的合法集合是什么?
  3. 为什么 hook 的豁免规则依赖分支命名规范?(一句话)
  4. squash merge 解决什么问题?合入后 develop 历史长什么样?
  5. release/vX.Y.Z 的完整流程是什么?back-merge 是干什么的?
  6. SemVer 三段号各自什么时候升?
  7. 一个 commit 消息的规范格式是什么?spec-first 提交是什么意思?
  8. 如果你的修复属于 hotfix,它在 hook 检查中的待遇是什么?

提示:第 3 题答案在 3.2;第 5 题在 6.1;第 6 题在 6.2;第 8 题在 3.2 的 hook 行为回顾。


9. 延伸阅读

  • sdd-harness 仓库(分支与 release 规范的出处):https://github.com/iMark21/sdd-harness
  • 腾讯云《出码率90%却没提效?》(从”个人技能”到”团队级工程能力”的动机):https://cloud.tencent.com/developer/article/2669269

本工作纸依据《SDD+Harness四周学习计划.md》Day 24 主题编制。整理日期:2026-09-09