Typography

一只奶牛猫

Git Commit规范与最佳实践

发布于 # git

Git Commit message 格式

设置用户

git config core.ignorecase false
git config --global user.name "张三"
git config --global user.email [email protected]

Git Commit规范

<type>(<scope>): <subject> #issue_number

<description>

其中,type、scope、subject是必需的,description 可以省略。不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。这是为了避免自动换行影响美观。

type必填表示提交类型,值有以下几种:

scope(可选)取值说明

scope用于说明 commit影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。例如: node-pc/common rrd-h5/activity,而we-sdk不需指定模块名。如果一次commit修改多个模块,建议拆分成多次commit,以便更好追踪和维护。后加入项目的新成员应遵循已有的 scope 约定(通过 git log可以查看某个文件的提交历史),不要自己编造。使用首字母小写的驼峰命名。除具体的模块、组件名之外,可以使用 base 表示基础结构、框架相关的改动,用 misc 表示杂项改动,用 all 表示大范围重构。

例如在Angular,可以是location,browser,compile,compile,rootScope, ngHref,ngClick,ngView等。如果你的修改影响了不止一个scope,你可以使用*代替。

subject(必须)

subject是 commit 目的的简短描述,50 个字符左右的简要说明。

中文

以上就是我们梳理的git commit规范,那么我们这样规范git commit到底有哪些好处呢?

英文

首字母小写,通常是动宾结构,描述做了什么事情,动词用一般现在时,禁止出现 update code , fix bug 等无实际意义的描述,好的例子: select connector by sorting free memory (不需要形如 update about how to select connector … 的啰嗦写法), fix success tip can not show on IE8 (不需要形如 fix bug of … 的啰嗦写法)

body

body填写详细描述,主要描述改动之前的情况及修改动机,对于小的修改不作要求,但是重大需求、更新等必须添加body来作说明。

break changes

break changes指明是否产生了破坏性修改,涉及break changes的改动必须指明该项,类似版本升级、接口参数减少、接口删除、迁移等。

affect issues

affect issues指明是否影响了某个问题。例如我们使用jira时,我们在commit message中可以填写其影响的JIRA_ID,若要开启该功能需要先打通jira与gitlab。

使用Commitizen工具

安装commitizen

npm install -g commitizen

安装完成后,使用

(base) [@dinghuangMacPro:test (master)]$git add .
(base) [@dinghuangMacPro:test (master)]$git cz
#会出现下面的,按照提示写入
(base) [@dinghuangMacPro:test (master)]$ git cz
[email protected], [email protected]

? Select the type of change that you're committing: (Use arrow keys)
❯ feat:     A new feature
  fix:      A bug fix
  docs:     Documentation only changes
  style:    Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
  refactor: A code change that neither fixes a bug nor adds a feature
  perf:     A code change that improves performance
  test:     Adding missing tests or correcting existing tests
(Move up and down to reveal more choices)

#选择类型后
? Select the type of change that you're committing: feat:     A new feature
? What is the scope of this change (e.g. component or file name): (press enter to skip) add aa.txt
? Write a short, imperative tense description of the change (max 82 chars):
 (4) 新增文件
? Provide a longer description of the change: (press enter to skip)
 长描述:这是我第一次的提交
? Are there any breaking changes? No
? Does this change affect any open issues? Yes
? Add issue references (e.g. "fix #123", "re #123".):
 feat #123

#查看生成的git commit信息
(base) [@dinghuangMacPro:test (master)]$ git log
commit 00d63b2c54c502bb75725e5a461d6ce9499910bc (HEAD -> master)
Author: 丁煌 <[email protected]m>
Date:   Wed Nov 25 13:39:13 2020 +0800

    feat(add aa.txt): 新增文件

    长描述:这是我第一次的提交

    feat #123

自动生成Change log

npm install -g conventional-changelog-cli
conventional-changelog -p angular -i CHANGELOG.md -s

这个插件是根据当前分支提交的所有commit信息来生成对应的changelog,一般是在开发完成后,封代码后去进行生成。如果自动生成的有问题,可以根据自己的需求进行修改。

分支规范

例如:

文章来源:Git提交规范 | 一只病猫 (dinghuang.github.io)