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

参考资料

相关推荐
June bug26 分钟前
Git 从零开始:完整项目上传指南
git
Tipriest_1 小时前
linux git ssh配置过程
linux·git·ssh
兰德里的折磨55017 小时前
使用git提交时出现了报错,新手不会的可以参考一下。
git
JavaDog程序狗19 小时前
【教程】以程序员张三的故事,沉浸式详解Git常用命令
git
坐吃山猪1 天前
GitPython03-项目setup编译
git·python·setup
liux35281 天前
DevOps 实践指南:Git 版本控制从入门到精通
git
一念&2 天前
Git 与 GitHub 的对比与使用指南
git·github
我是李武涯2 天前
svn与git Merge重要区别讲解
git·svn
ん贤2 天前
Git分支
git