git commit规范

本文最后更新于:2023年12月5日 晚上

Angular.js 项目所使用的git commit规范

每次提交,Commit message 都包括三个部分:Header,Body 和 Footer。其中,Header 是必需的,Body 和 Footer 可以省略

Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)

type

  • build:编译相关的修改,例如发布版本、对项目构建或者依赖的改动
  • chore:其他修改, 比如改变构建流程、或者增加依赖库、工具等
  • ci:持续集成修改
  • docs:文档修改
  • feat:新特性、新功能 feature
  • fix:修补bug
  • perf:优化相关,比如提升性能、体验
  • refactor:代码重构
  • revert:当前commit用于撤销以前的commit
  • style:代码格式修改,注意不是 css 修改
  • test:测试用例修改

[scope]

scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

例如在Angular,可以是$location, $browser, $compile, $rootScope, ngHref, ngClick, ngView等。

如果你的修改影响了不止一个scope,你可以使用*代替。

subject

subject是 commit 目的的简短描述,不超过50个字符。

其他注意事项:

  • 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
  • 第一个字母小写
  • 结尾不加句号(.)

Body

Body 部分是对本次 commit 的详细描述,可以分成多行。下面是一个范例。

More detailed explanatory text, if necessary. Wrap it to about 72 characters or so. Further paragraphs come after blank lines. - Bullet points are okay, too - Use a hanging indent

注意点:

  • 使用第一人称现在时,比如使用change而不是changed或changes。
  • 永远别忘了第2行是空行
  • 应该说明代码变动的动机,以及与以前行为的对比。

Footer 部分只用于以下两种情况:

不兼容变动

如果当前代码与上一个版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法。

BREAKING CHANGE: isolate scope bindings definition has changed. To migrate the code follow the example below: Before: scope: { myAttr: ‘attribute’, } After: scope: { myAttr: ‘@’, } The removed inject wasn’t generaly useful for directives so there should be no code using it.

关闭 Issue

如果当前 commit 针对某个issue,那么可以在 Footer 部分关闭这个 issue 。

Closes #234

revert

如果当前 commit 用于撤销以前的 commit,则必须以revert:开头,后面跟着被撤销 Commit 的 Header。

revert: feat(pencil): add ‘graphiteWidth’ option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.

Body部分的格式是固定的,必须写成This reverts commit <hash>.,其中的hash是被撤销 commit 的 SHA 标识符。

如果当前 commit 与被撤销的 commit,在同一个发布(release)里面,那么它们都不会出现在 Change log 里面。如果两者在不同的发布,那么当前 commit,会出现在 Change log 的Reverts小标题下面。

举个例子

例如一个新功能,添加登陆模块 git commit 中的信息可以这样写:

feat[login] add login module

其中feat为提交类型type,login为域scope,“add login module”为 commit 目的的简短描述

git cz工具

# 全局安装
yarn global add commitizen

# 进入项目
commitizen init cz-conventional-changelog --save --save-exact

commitlint + husky

  1. 安装配置prettier

    # 安装
    yarn add --dev --exact prettier
    # 配置
    .prettierrc.js
    .prettierignore
  2. 安装配置 Pre-commit Hook,用于提交代码之前自动格式化,这里会自动安装 husky

    npx mrm@2 lint-staged
  3. 安装 eslint-config-prettier,解决prettier和eslint的冲突

    yarn add eslint-config-prettier -D
    
    # vim package.json
    ...
      "eslintConfig": {
        "extends": [
          "react-app",
          "react-app/jest",
          "prettier"
        ]
      },
    ...
  4. 安装并配置 commitlint

    # 1.
    yarn add @commitlint/{config-conventional,cli} -D
    # 2.
    echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
    # 3.
    cat <<EEE > .husky/commit-msg
    #!/bin/sh
    . "\$(dirname "\$0")/_/husky.sh"
    
    npx --no -- commitlint --edit "\${1}"
    EEE
    # 4.
    chmod a+x .husky/commit-msg

git commit规范
http://blog.lujinkai.cn/前端/React/git commit规范/
作者
像方便面一样的男子
发布于
2022年9月24日
更新于
2023年12月5日
许可协议