关于Commit message代码提交

Commit message代码提交规范


一、简述

commit message 提交说明:应清晰明了,说明本次提交目的
社区有多种 Commit message 的写法规范。
Angular 规范(如图)是目前使用最广的写法,比较合理和系统化,并且有配套的工具。
在这里插入图片描述

Commit message 的作用

1、提供更多的历史信息,方便快速浏览
比如,下面的命令显示上次发布后的变动,每个commit占据一行。只看行首可知某次commit目的(图见下)

$ git log <last tag> HEAD --pretty=format:%s

在这里插入图片描述
2、过滤某些commit(比如文档改动),便于快速查找信息
比如,下面的命令仅仅显示本次发布新增加的功能

$ git log <last release> HEAD --grep feature

3、直接从commit生成Change log
Change Log 是发布新版本时,用来说明与上一个版本差异的文档
在这里插入图片描述
4、可读性好,清晰,快速了解当前commit的作用
5、为 Code Reviewing(代码审查)做准备
6、方便跟踪工程历史
7、提高项目的整体质量,提高个人工程素质

二、Commit message格式–命令行方式

Commit message 包括三个部分:HeaderBodyFooter

 <type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

1、Header

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

(1)type:说明 commit 的类别,只允许使用下面的标识

- feat:新增功能(feature)

- fix/to:修补bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。
  fix:产生diff并自动修复此问题。适合于一次提交直接修复问题
  to:只产生diff不自动修复此问题。适合于多次提交。最终修复问题提交时使用fix

- docs:文档(documentation),仅仅修改了文档,比如 README, CHANGELOG, CONTRIBUTE等等

- style: 格式(不影响代码运行的变动),仅仅修改了空格、格式缩进、逗号等等,不改变代码逻辑

- refactor:重构(即不是新增功能,也不是修改bug的代码变动)

- test:增加测试,包括单元测试、集成测试等

- chore:构建过程或辅助工具的变动

- type:代表某次提交的类型,比如是修复一个bug还是增加一个新的feature

- perf: 优化相关,比如提升性能、体验

- revert: 回滚到上一个版本

- ci:自动化流程配置修改

- merge:代码合并

- sync:同步主线或分支的Bug

注:
若type为feat和fix,则该 commit 将肯定出现在 Change log 之中;
其他情况(docs、chore、style、refactor、test)由自己决定是否放入 Change log,建议不要。

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

(3)subject

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

a.建议使用中文(感觉中国人用中文描述问题能更清楚一些)。
b.以动词开头,使用第一人称现在时,比如change,而不是changed或changes
c.第一个字母小写
d.结尾不加句号(.)或其他标点符号

根据以上规范git commit message将是如下的格式

fix(DAO):用户查询缺少username属性 

feat(Controller):用户查询接口开发

2、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

注:
a.使用第一人称现在时,比如使用change而不是changed或changes。
b.应该说明代码变动的动机,以及与以前行为的对比。

3、Footer

只用于两种情况:不兼容变动关闭 Issue

(1)不兼容变动
如果当前代码与上一个版本不兼容,则 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.

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

Closes #234

也可以一次关闭多个 issue

Closes #123, #245, #992

4、Revert

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

revert: feat(pencil): add 'graphiteWidth' option
This reverts commit 667ecc1654a317a13331b17617d973392f415f02.

① Body部分的格式是固定的,必须写成This reverts commit ,其中的hash是被撤销 commit 的 SHA 标识符。
② 如果当前 commit 与被撤销的 commit,在同一个发布(release)里面,那么它们都不会出现在 Change log 里面。如果两者在不同的发布,那么当前 commit,会出现在 Change log 的Reverts小标题下面。

三、工具

1、Commitizen

Commitizen是一个格式化commit message的工具。

安装命令:

$ npm install -g commitizen

Then,在项目目录里,运行下面的命令,使其支持 Angular 的 Commit message 格式。

$ commitizen init cz-conventional-changelog --save --save-exact

After,凡是用到git commit命令,一律改为使用git cz。这时,就会出现选项,用来生成符合格式的 Commit message。
在这里插入图片描述

2、validate-commit-msg

validate-commit-msg 用于检查 Node 项目的 Commit message 是否符合格式。

手动安装
First,拷贝下面这个JS文件,放入代码库。文件名可以取为validate-commit-msg.js。
Then,把这个脚本加入 Git 的 hook。下面是在package.json里面使用 ghooks,把这个脚本加为commit-msg时运行。

  "config": {
    "ghooks": {
      "commit-msg": "./validate-commit-msg.js"
    }
  }

Finally,每次git commit的时候,这个脚本就会自动检查 Commit message 是否合格。如果不合格,就会报错。

$ git add -A 
$ git commit -m "edit markdown" 
INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" ! was: edit markdown

四、TortoiseSVN提交日志规范

日志提交简单规则

message提交:版本号 type类别 提交信息描述

  1. 完成某个任务,尽可能提交该任务,原则是一个任务一次提交。
  2. 提交格式:[任务号 任务标题]
    在这里插入图片描述
  3. 当几个任务一起完成提交时,可以把几个相同类似的任务分批提交:
    格式:[功能名称:任务1 编码 任务2 编码 任务3 编码 …… 任务n 编码]
    注:不提倡
    在这里插入图片描述
  4. 某些原因没有提交正确格式时,需要进行更正:
    右键 → Edit log message 更正提交的日志信息
    修改保存后,本机这边改变了,其他机器上即便更新代码,并没有改变,因为TortiseSVN会缓存。
    需要设置SettingsSaved Data中,将Log messages xxxclear 即可
    在这里插入图片描述
    在这里插入图片描述
  5. 提交日志时,以下几项严禁和反对:
    1)完全与项目无关的
    2)与项目有关但语义不清

相关参考链接

Commit message 代码提交规范
commit message和 Change log 编写指南
Git 提交的正确姿势:Commit message 编写指南
【Git学了就忘-实操(二)】修改已提交commit的message
TortoiseSVN提交日志规范
SVN与TortoiseSVN修改日志和强制写日志实现详解
SVN实现详解与TortoiseSVN修改日志和强制写日志
SVN常见的错误及处理方法
[Subversion] 修改旧版次的讯息与作者名称
[转][SVN] Hook scripts的使用方法
[Subversion] 修改舊版次的訊息與作者名稱



当你为错过太阳而哭泣的时候,你也要再错过群星了。 ——泰戈尔

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值