Git Commit 提交规范

Git Commit 规范是一套约定俗成的规则,用于统一代码提交信息的格式和内容。它可以帮助团队更清晰地记录代码变更历史,方便回溯问题、生成更新日志(CHangelog)或自动化版本管理。以下是常见的规范和实践:


1. 基本格式

一个规范的 Commit Message 通常包含 HeaderBodyFooter 三部分:

<类型>(<作用域>): <主题>
<空行>
[正文]
<空行>
[脚注]
示例
feat(user): 新增用户登录功能

- 支持邮箱和手机号登录
- 添加第三方登录入口

Closes #123

2. 核心字段说明

类型(Type)

指明本次提交的目的,常用类型如下:

类型说明
feat新增功能
fix修复问题/BUG
docs文档更新(如 README、注释)
style代码格式调整(如空格、分号,不影响逻辑)
refactor代码重构(既不修复 BUG 也不新增功能)
test测试相关(新增测试用例或修改测试代码)
chore构建/工具/依赖的改动(如 Webpack 配置、npm 脚本)
perf性能优化
ci持续集成相关的修改(如 GitHub Actions、Jenkins)
revert回滚之前的提交
作用域(Scope)

可选字段,表示修改的影响范围(如模块、组件、文件名):

  • 例如:feat(user), fix(api), docs(README)
主题(Subject)

简明扼要的说明,建议:

  • 使用动词开头(如 “新增”、“修复”、“优化”)
  • 首字母小写,结尾不加句号
  • 英文推荐使用祈使句(如 Add user login feature
正文(Body)

可选,详细描述修改内容,例如:

  • 改动的背景和原因
  • 与之前行为的对比
  • 技术实现的关键点
脚注(Footer)

可选,用于关联 Issue 或标注破坏性变更:

  • 关闭 Issue:Closes #123, #456
  • 重大变更(BREAKING CHANGE):
    BREAKING CHANGE: 移除旧版 API
    

3. 规范的价值

  • 清晰的提交历史:快速定位特定类型的修改(如 feat/fix)。
  • 自动化生成 CHANGELOG:根据类型自动归类更新内容。
  • 触发语义化版本号:结合工具(如 standard-version)自动升级版本号:
    • feat → 小版本(Minor)
    • fix → 修订版本(Patch)
    • BREAKING CHANGE → 主版本(Major)
  • 提高代码审查效率:通过提交信息快速理解改动意图。

4. 工具支持

1. Commitizen
  • 交互式生成规范提交信息:
    npm install -g commitizen
    commitizen init cz-conventional-changelog --save-dev --save-exact
    
  • 使用:git cz 替代 git commit
2. Commitlint
  • 校验提交信息是否符合规范:
    # 安装
    npm install --save-dev @commitlint/cli @commitlint/config-conventional
    # 配置文件 .commitlintrc.js
    module.exports = { extends: ['@commitlint/config-conventional'] };
    
3. Husky
  • 添加 Git 钩子,在提交前自动检查:
    npx husky install
    npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'
    

5. 扩展规范

  • Conventional Commits:社区广泛采用的规范,详见 conventionalcommits.org
  • Angular 规范:最早提出并实践的 Commit 规范,细节略有不同。

通过遵循一致的提交规范,团队可以显著提升协作效率和代码可维护性。建议在项目初期约定规则,并通过工具强制执行。

### Git Commit Message 规范示例 #### 单行提交信息格式 每次提交应当只解决一个问题,这有助于简化代码审查过程并提高可追溯性。单行提交信息应该简洁明了,通常不超过72个字符[^1]。 ```plaintext type(scope): subject ``` - `type` 表示更改的性质(如 feat, fix) - `scope` 是可选字段,用于指定受影响的部分或模块名称 - `subject` 描述所做的改动摘要 #### 完整多行提交信息结构 对于更复杂的变更,则推荐采用如下完整的多行格式: ```plaintext type(scope): subject Body explaining the change and its motivation. Footer with any relevant issue references. ``` 其中: - **Header**: 包含三部分——类型(type),作用域(scope)以及主题(subject) - **Body**: 对修改原因及实现细节做进一步解释说明;如果适用的话还可以提及如何测试这些变化。 - **Footer**: 如果有的话,在这里注明关联的问题编号或者其他元数据信息,例如关闭某个GitHub Issues。 #### 实际案例展示 ##### 添加新功能的例子 当向项目中引入新的特性时,可以这样书写commit message: ```plaintext feat(user-profile): add avatar upload feature Allow users to upload avatars from their local machines or via URL links. This enhancement improves user experience by personalizing profiles. Closes #1234 ``` ##### 修复Bug的例子 针对错误修正类别的提交消息则像下面这样表达: ```plaintext fix(authentication): resolve login redirect loop on Safari browser The previous implementation caused an infinite redirection when logging in using Safari due to incorrect handling of session cookies. The solution was implemented according to best practices outlined at MDN Web Docs regarding secure cookie settings. Fixes #9876 ``` #### 工具支持 为了确保团队成员都能遵循一致的消息格式化规则,建议使用工具辅助验证。例如可以通过配置 pre-commit hook 来运行 validate-commit-msg 或者集成 CI/CD 流程中的检查脚本以自动拒绝不符合规定的提交请求[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值