前言
本文主要介绍Angular Convention的git message规范,以及本人在使用IDEA进行开发时采用的一套实践标准。完整实践流程:通过IDEA插件生成本次的提交消息,在此基础上通过git hooks来捆绑一些通用的信息,比如分支名字。
Angular 团队制定的 Commit Message 规范是前后端领域最广泛采用的提交约定之一,它通过标准化提交信息实现以下目标:
- 自动生成可读的 CHANGELOG
- 驱动语义化版本(SemVer)
- 提高团队协作效率
- 便于追踪代码变更历史
使用Angular Convention可以达到如下规范价值:
-
版本管理
feat
→ 触发MINOR
版本升级fix
→ 触发PATCH
版本升级BREAKING CHANGE
→ 触发MAJOR
版本升级
-
代码审查
通过类型快速识别提交目的:
textfeat: 需要关注功能实现 fix: 需要验证Bug是否修复 refactor: 警惕潜在逻辑变更
-
历史追溯
可通过类型/作用域过滤提交记录:
bashgit log --grep="^feat(router):"
1. 核心格式
每条提交信息必须遵循以下结构:
text
<type>(<scope>): <subject>
<空行>
<body>
<空行>
<footer>
1.1 头部(Header)
1.1.1 类型(Type)必填
类型 | 说明 | 版本影响 |
---|---|---|
feat |
新增功能 | MINOR (v0.X.0) |
fix |
Bug修复 | PATCH (v0.0.X) |
docs |
文档更新 | - |
style |
代码样式调整(空格、格式化等) | - |
refactor |
代码重构(非功能变更) | - |
perf |
性能优化 | PATCH |
test |
测试代码变更 | - |
build |
构建系统或依赖更新 | - |
ci |
CI配置变更 | - |
chore |
杂项任务(非代码变更) | - |
revert |
回滚某次提交 | - |
1.1.2 作用域(Scope)可选
指定修改的影响范围,例如:
compiler
router
core
http
animations
1.1.3 主题(Subject) 必填
- 简明描述(50字符内)
- 首字母小写
- 不使用句号结尾
- 使用命令式语气(如"add"而非"added")
示例:
text
feat(router): add dynamic route preloading
1.2 正文(Body) 可选
- 详细说明修改动机 和实现方式
- 每行不超过72字符
- 使用空白行分隔段落
示例:
text
feat(compiler): support TypeScript 4.9
- Upgrade parser to handle satisfies operator
- Add AST transformer for new syntax
- Update type checking rules
1.3 页脚(Footer) 可选
1.3.1 关联Issue
text
Closes #123, #245
Fixes #110
1.3.2 BREAKING CHANGE
标明不兼容变更,必须以BREAKING CHANGE:
开头:
text
BREAKING CHANGE:
- `ViewChild` now requires static flag
- Drop support for Node.js 12
2. 完整示例
2.1 带BREAKING CHANGE的功能提交
text
feat(core): implement new renderer API
Introduce Ivy renderer as default engine with
backward compatibility layer.
BREAKING CHANGE:
- Compiler output format changed to `ɵ` prefixed fields
- `Renderer` class is now deprecated
Closes #500
2.2 简单修复提交
text
fix(http): prevent memory leak in interceptors
Clear subscription when HttpClient is destroyed.
Adds unsubscribe logic in interceptor chain.
Fixes #112
3. IDEA实战使用
在实际项目中,本人采用的IDEA插件结合Git hooks方法来规范代码提交记录
3.1 IDEA插件-Git Commit Message Helper
该插件是源自git-commit-template的加强版,添加一系列个性化的配置

3.2 Git Hooks实现message自定义处理
实现代码被真正提交时,附带一些通用的信息,如代码分支名称
- 进入项目的
.git/hooks
目录
sh
cd your-project/.git/hooks
- 创建/修改
prepare-commit-msg
文件
sh
touch prepare-commit-msg && chmod +x prepare-commit-msg
- 自定义文件内容:如提取分支名称中的某个数字串
sh
#!/bin/sh
BRANCH_NAME=$(git symbolic-ref --short HEAD)
BRANCH_NUMBER=$(echo "$BRANCH_NAME" | grep -oE 'branch-[0-9]{6}' | grep -oE '[0-9]{6}')
# 自动生成消息前缀(如果找到编号则添加,否则不加)
if [ -n "$BRANCH_NUMBER" ]; then
echo "[maicai-${BRANCH_NUMBER}] $(cat "$1")" > "$1"
fi
3.3 实际效果
假设分支名是:f-branch-276914 则效果如下所示:被模糊的地方刚好是上面对应的branch
