Git Commit Message规范:Angular Convention

前言

本文主要介绍Angular Convention的git message规范,以及本人在使用IDEA进行开发时采用的一套实践标准。完整实践流程:通过IDEA插件生成本次的提交消息,在此基础上通过git hooks来捆绑一些通用的信息,比如分支名字。

Angular 团队制定的 Commit Message 规范是前后端领域最广泛采用的提交约定之一,它通过标准化提交信息实现以下目标:

  • 自动生成可读的 CHANGELOG
  • 驱动语义化版本(SemVer)
  • 提高团队协作效率
  • 便于追踪代码变更历史

使用Angular Convention可以达到如下规范价值:

  1. 版本管理

    • feat → 触发MINOR版本升级
    • fix → 触发PATCH版本升级
    • BREAKING CHANGE → 触发MAJOR版本升级
  2. 代码审查

    通过类型快速识别提交目的:

    text 复制代码
    feat: 需要关注功能实现
    fix: 需要验证Bug是否修复
    refactor: 警惕潜在逻辑变更
  3. 历史追溯

    可通过类型/作用域过滤提交记录:

    bash 复制代码
    git 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自定义处理

实现代码被真正提交时,附带一些通用的信息,如代码分支名称

  1. 进入项目的 .git/hooks 目录
sh 复制代码
cd your-project/.git/hooks
  1. 创建/修改 prepare-commit-msg 文件
sh 复制代码
touch prepare-commit-msg && chmod +x prepare-commit-msg
  1. 自定义文件内容:如提取分支名称中的某个数字串
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

参考资料

相关推荐
阿巴~阿巴~42 分钟前
Git 删除文件
git·gitee·github
花椒和蕊7 小时前
记录git报错ssh: connect to host github.com port 22: Connection timed out,已解决
git·ssh·github
wayhome在哪10 小时前
Git 合并:Merge 还是 Rebase?
git·面试·github
自动花钱机1 天前
Cherry-pick冲突与Git回滚
git
coderklaus1 天前
git rebase
git
苏元1 天前
☠️ 写错 commit = 绩效自爆,别说我没提醒你!
git
程序设计实验室1 天前
模型文件硬塞进 Git,GitHub 直接打回原形:使用Git-LFS管理大文件
git
Dontla2 天前
脚本:git push直到成功(windows powershell命令)(Github连不上、Github断开)
git·github
CAE虚拟与现实2 天前
GitHub Desktop 和 Git 命令行工具(CLI)各有优势
git·github·github desktop
RePeaT2 天前
代码双仓库备份指南:三种简单高效的方法
git·github