Git 分支与提交命名规范
版本: 2.0
适用范围: 通用软件工程团队(与具体项目/产品线无关)
参考标准: Conventional Commits、Semantic Versioning、Git Flow、GitHub Flow
1. 总则
1.1 命名基本原则
|
规则 |
说明 |
|
全小写 |
分支名、标签名一律使用小写字母与数字 |
|
连字符分隔 |
多词之间用 |
|
斜杠分层 |
短期分支使用 |
|
语义清晰 |
名称应体现变更类型 + 变更意图,避免 |
|
短而准 |
描述部分建议 2~5 个英文单词,总长不超过 50 字符 |
|
ASCII 优先 |
优先使用英文;若团队统一使用中文拼音,需全团队一致并写入规范 |
1.2 推荐与禁止示例
推荐
feature/user-authentication
fix/login-session-expiry
hotfix/payment-timeout
release/1.4.0
禁止
feature/fix # 语义不明
Feature/UserAuth # 大小写混用
feature_user_auth # 使用下划线
dev-zhangsan-20240710 # 含人名/日期的临时分支
wip # 无类型前缀
1.3 分支策略选型
团队应在以下模型中择一为主,并在规范中明确默认合入目标:
|
模型 |
适用场景 |
核心长期分支 |
|
GitHub Flow |
持续交付、Web/SaaS、单主干 |
|
|
Git Flow |
版本化发布、需发布冻结期 |
|
|
Trunk-Based Development |
高频集成、强 CI/CD |
|
下文以 Git Flow + Conventional Commits 为默认叙述(业界最常见组合),采用 GitHub Flow 的团队可忽略 develop 相关条目。
2. 长期分支(Long-lived Branches)
长期分支受保护(Protected Branch),禁止直接 force push,仅通过 Pull Request / Merge Request 合入。
|
分支名 |
用途 |
说明 |
|
|
生产基线 |
与线上发布版本一致;仅接受 |
|
|
生产基线(历史命名) |
与 |
|
|
集成开发主干 |
日常开发集成分支;功能/fix 分支的默认合入目标(Git Flow) |
约束
- 长期分支禁止
--force推送 - 合入前须通过 CI 与 Code Review
- 不在长期分支上直接开发(紧急 hotfix 除外)
3. 短期分支(Short-lived Branches)
从对应的长期分支拉取,完成工作后通过 PR/MR 合入,合入后删除远程分支。
3.1 功能分支 — feature/
用于新功能、需求迭代、非紧急重构。
feature/<简短描述>
feature/<issue-id>-<简短描述> # 关联 Issue 时推荐
|
字段 |
规则 |
示例 |
|
简短描述 |
动宾或名词短语,kebab-case |
|
|
issue-id |
可选,与 Tracker 一致 |
|
示例
feature/oauth2-login
feature/123-export-user-report
feature/shopping-cart-checkout
工作流(Git Flow)
develop ──► feature/oauth2-login ──► PR ──► develop
3.2 缺陷修复分支 — fix/ 或 bugfix/
用于开发/测试阶段发现的缺陷修复(非生产紧急问题)。
fix/<简短描述>
fix/<issue-id>-<简短描述>
示例
fix/null-pointer-on-logout
fix/456-email-validation-regex
fix/ 与 bugfix/ 语义相同,团队择一统一;Conventional Commits 中对应类型均为 fix。
与 hotfix/ 的区别见 §3.3。
3.3 热修复分支 — hotfix/
用于生产环境紧急修复。从 main(或 master)拉取,修复后合入 main 并回合并入 develop(Git Flow)。
hotfix/<简短描述>
hotfix/<版本号>-<简短描述> # 多热修并行时可加版本号
示例
hotfix/payment-gateway-timeout
hotfix/1.2.1-session-leak
工作流(Git Flow)
main ──► hotfix/payment-gateway-timeout ──► PR ──► main
└──► PR ──► develop
3.4 发布分支 — release/
用于发布前版本冻结、CHANGELOG 整理、版本号 bump、回归测试。从 develop 拉取,完成后合入 main 并打 Tag,再回合并入 develop。
release/<主版本>.<次版本>.<修订号>
遵循 Semantic Versioning:MAJOR.MINOR.PATCH
示例
release/1.4.0
release/2.0.0-rc.1 # 预发布版本(可选)
3.5 重构分支 — refactor/
不改变外部可观测行为的大规模结构调整。
refactor/<简短描述>
示例
refactor/extract-payment-service
refactor/migrate-to-vitest
3.6 工程化分支 — chore/
构建脚本、依赖升级、CI 配置、工具链变更等非业务代码。
chore/<简短描述>
示例
chore/upgrade-node-20
chore/add-dependabot-config
3.7 文档分支 — docs/
仅文档变更(若与功能同 PR 可不必单独建分支)。
docs/<简短描述>
示例
docs/api-authentication-guide
docs/update-contributing
3.8 实验分支 — experiment/ 或 spike/
概念验证、技术调研;不得直接合入 main,结论沉淀后以 feature/ 或 refactor/ 重新提交。
experiment/<简短描述>
3.9 禁止的分支命名模式
|
模式 |
原因 |
|
|
个人临时分支易泄漏、难追溯 |
|
纯数字、纯日期 |
无语义 |
|
含空格或特殊字符 |
跨平台/Git 工具兼容性问题 |
|
与长期分支同名前缀混淆 |
如 |
4. Tag 命名规范
发布 Tag 与 release/* 分支版本号保持一致,遵循 Semantic Versioning。
v<主版本>.<次版本>.<修订号>
v<主版本>.<次版本>.<修订号>-<预发布标识>.<序号> # 预发布
示例
v1.4.0
v1.4.1 # patch:向后兼容的 bug 修复
v2.0.0 # major:含破坏性变更
v1.5.0-beta.1 # 预发布
v1.5.0+build.20240710 # 构建元数据(可选)
约束
- Tag 仅打在
main(或发布 commit)上 - 禁止移动已推送的 Tag;若需修正,使用新的 patch 版本号
- Annotated Tag 优于 Lightweight Tag(含作者、日期、说明)
git tag -a v1.4.0 -m "Release 1.4.0: OAuth2 login, CSV export"
5. Commit Message 规范
采用 Conventional Commits 规范,便于自动生成 CHANGELOG、语义化版本号(semantic-release)及代码审查。
5.1 基本格式
<类型>[可选 作用域]: <描述>
[可选 正文]
[可选 脚注]
单行示例(最常见)
feat(auth): add OAuth2 authorization code flow
fix(cart): prevent duplicate item on rapid click
docs(readme): update local development setup
5.2 类型(Type)
|
类型 |
含义 |
语义化版本影响 |
|
|
新功能 |
MINOR ↑ |
|
|
缺陷修复 |
PATCH ↑ |
|
|
仅文档 |
— |
|
|
格式(空格、分号等,不影响逻辑) |
— |
|
|
重构(非 feat/fix) |
— |
|
|
性能优化 |
PATCH ↑(部分工具) |
|
|
测试增删改 |
— |
|
|
构建系统或外部依赖 |
— |
|
|
CI 配置与脚本 |
— |
|
|
其他不修改 src/test 的维护性工作 |
— |
|
|
回滚先前提交 |
视被回滚内容 |
破坏性变更(Breaking Change)
在类型后加 !,或在脚注写 BREAKING CHANGE::
feat(api)!: remove deprecated v1 endpoints
BREAKING CHANGE: /api/v1/* routes removed; migrate to /api/v2/*
5.3 作用域(Scope)
可选,表示变更影响的模块/包/层级:
feat(auth): ...
fix(payment/stripe): ...
chore(deps): ...
团队应维护一份推荐 scope 列表(如 auth、api、ui、db),但不强制穷举。
5.4 描述(Subject)约束
|
规则 |
说明 |
|
祈使语气 |
英文用 "add" 而非 "added";中文可用「添加」 |
|
首字母 |
英文描述首字母小写(专有名词除外) |
|
无句号 |
Subject 末尾不加 |
|
长度 |
不超过 72 字符(50 字符以内更佳) |
|
语言 |
全团队统一中文或英文,不混用 |
5.5 正文(Body)与脚注(Footer)
跨文件、行为变更、架构决策时建议写正文,说明 为什么改(而非重复改了什么)。
脚注常用键:
Refs: #123
Closes: #456
Reviewed-by: Alice <alice@example.com>
Co-authored-by: Bob <bob@example.com>
Signed-off-by: Carol <carol@example.com> # DCO 场景
完整示例
fix(session): extend idle timeout for mobile clients
Mobile WebView resets activity timestamps inconsistently.
Increase idle timeout from 15m to 30m for mobile user agents only.
Closes: #789
5.6 禁止的 Commit Message
update
fix bug
WIP
temp
misc changes
asdf
5.7 Merge / Squash 策略
|
策略 |
适用 |
主干历史 |
|
Squash merge |
功能分支多而杂的 WIP 提交 |
线性,一 PR 一 commit |
|
Rebase merge |
提交历史已整洁 |
线性,保留多个语义 commit |
|
Merge commit |
需保留分支拓扑 |
有 merge 节点 |
推荐: 短期分支合入 main/develop 时优先 Squash merge;Squash 后的标题应是一条符合 Conventional Commits 的 message,正文可汇总 PR 描述。
6. 分支与 Commit 类型对照
|
分支前缀 |
推荐 Commit 类型 |
典型合入目标 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7. 分支生命周期
创建 ──► 开发(与目标分支同步)──► PR 评审 ──► CI 通过 ──► 合入 ──► 删除远程分支
|
阶段 |
要求 |
|
创建 |
从最新的目标长期分支拉取;命名符合 §3 |
|
开发 |
定期 |
|
评审 |
PR 标题遵循 Conventional Commits;关联 Issue;描述影响范围与测试方式 |
|
合入 |
CI 绿 + 至少 1 人 Approve(团队可规定 2 人) |
|
清理 |
合入后 24~48h 内删除远程短期分支 |
分支存活期建议
|
分支类型 |
建议最长存活 |
|
|
≤ 2 周 |
|
|
≤ 3 天 |
|
|
≤ 24 小时 |
|
|
至发布完成 |
|
|
≤ 1 周(过期即删) |
8. 快速对照表
|
场景 |
从哪拉 |
合入哪 |
分支名示例 |
|
新功能(Git Flow) |
|
|
|
|
新功能(GitHub Flow) |
|
|
|
|
开发期 Bug |
|
|
|
|
生产热修 |
|
|
|
|
版本发布 |
|
|
|
|
依赖升级 |
|
|
|
|
技术验证 |
|
不合 main,转 feature |
|
9. Pull Request 标题规范
PR 标题应与合入后的 commit message 一致,推荐直接使用 Conventional Commits 格式:
feat(auth): add OAuth2 authorization code flow
fix(cart): prevent duplicate item on rapid click
关联 Issue 可在 PR 描述或脚注中声明 Closes #123,而非写入分支名。
10. 工具与自动化建议
|
工具 |
用途 |
|
校验 commit message |
|
|
Git hooks 触发 lint/test |
|
|
按 commit 自动 bump 版本、发 Tag、生成 CHANGELOG |
|
|
Google 风格自动化发布 |
|
|
Branch protection rules |
强制 PR、CI、Review |
pre-commit 示例(commitlint)
{
"extends": ["@commitlint/config-conventional"]
}
11. 修订记录
|
版本 |
日期 |
说明 |
|
2.0 |
2026-07-10 |
重写为业界通用规范:Conventional Commits、SemVer、Git Flow/GitHub Flow,去除项目特定命名 |
|
1.0 |
— |
项目定制版(已 supersede) |
附录 A:Conventional Commits 完整类型速查
feat → 新功能
fix → Bug 修复
docs → 文档
style → 代码格式(不影响含义)
refactor → 重构
perf → 性能
test → 测试
build → 构建/依赖
ci → 持续集成
chore → 杂项维护
revert → 回滚
附录 B:SemVer 升级规则摘要
|
变更性质 |
版本段 |
示例 |
|
破坏性 API/行为变更 |
MAJOR |
1.4.0 → 2.0.0 |
|
向后兼容的新功能 |
MINOR |
1.4.0 → 1.5.0 |
|
向后兼容的 Bug 修复 |
PATCH |
1.4.0 → 1.4.1 |
附录 C:参考链接
更多推荐

所有评论(0)