专栏首页琯琯博客Git 提交规范

Git 提交规范

一直是 ESLint 的忠实用户,深知规范的重要性。然而,在新项目交接中,我被 Git Commit 规范逼疯了。才意识到自己的疏忽,于是便有了一探究竟的想法。

一、为什么需要规范?

无规矩不成方圆,编程也一样。 如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你。可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项目就被糟践了。不管是开发还是日后维护,都将是灾难。 这时候,有人提出了何不统一标准,大家都按照这个标准来。于是 ESLint,JSHint 等代码工具如雨后春笋般涌现,成为了项目构建的必备良品。 Git Commit 规范可能并没有那么夸张,但如果你在版本回退的时候看到一大段糟心的 Commit,恐怕会懊恼不已吧。所以,严格遵守规范,利人利己。

二、具体规则

先来看看公式:

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

2.1 type

用于说明 commit 的类别,只允许使用下面 7 个标识。

1.  feat:新功能(feature)
2.  fix:修补 bug
3.  docs:文档(documentation)
4.  style: 格式(不影响代码运行的变动)
5.  refactor:重构(即不是新增功能,也不是修改 bug 的代码变动)
6.  test:增加测试
7.  chore:构建过程或辅助工具的变动

2.2 scope

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

2.3 subject

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

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

规范参考自阮一峰老师的文章:Commit message 和 Change log 编写指南

三、异常处理

我们先来看看这个异常提醒:

INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" !jartto:fix bug

这里之所以报出这个警告,是因为我的提交出现了两个问题: 其一,使用了规范外的关键字; 其二,很细节的问题,jartto:后少了空格。 这时候我才回忆起来,当时提交一直失败,情急之下直接强制提交,所以以后的提交都会抱出这个异常。大致意思就是: 你的之前的 Commit 不合格~你的之前的 Commit 不合格~你的之前的 Commit 不合格 这时候就很烦了,我们只能去将之前的错误修正,那么如何操作呢?

四、如何修改之前的 Commit 信息?

其实并不复杂,我们只需要这样做:

4.1 将当前分支无关的工作状态进行暂存

git stash

4.2 将 HEAD 移动到需要修改的 commit 上

1、git rebase 9633cf0919^ --interactive
3、找到需要修改的 Commit,将首行的 pick 改成 edit
4、开始着手解决你的 bug
5、 git add 将改动文件添加到暂存
6、 git commit –amend 追加改动到提交
7、git rebase –continue 移动 HEAD 回最新的 commit
8、恢复之前的工作状态
9、git stash pop

大功告成,是不是想把整个 Commit 都修改一遍,逃~ 此处参考自:修改 Commit 日志和内容

五、项目中使用

这时候问题又来了,为什么我提交的时候会有警告,这个又是如何做到的呢? 这时候,我们需要一款 Node 插件 validate-commit-msg 来检查项目中 Commit message 是否规范。

5.1 首先,安装插件:

npm install --save-dev validate-commit-msg

5.2 使用方式一,建立 .vcmrc 文件:

{
    "types": ["feat", "fix", "docs", "style", "refactor", "perf", "test", "build", "ci", "chore", "revert"],
    "scope": {

        "required": false,

        "allowed": ["*"],

        "validate": false,

        "multiple": false
    },

    "warnOnFail": false,

    "maxSubjectLength": 100,

    "subjectPattern": ".+",

    "subjectPatternErrorMsg": "subject does not match subject pattern!",

    "helpMessage": "",

    "autoFix": false
} 

5.3 使用方式二:写入 package.json

{
    "config": {
        "validate-commit-msg": {
          /* your config here */
        }
    }
} 

5.4 可是我们如果想自动使用 ghooks 钩子函数呢?

{
    …
    "config": {
        "ghooks": {

          "pre-commit": "gulp lint",

          "commit-msg": "validate-commit-msg",

          "pre-push": "make test",

          "post-merge": "npm install",

          "post-rewrite": "npm install",
          …
        }
    }
    …
} 

在 ghooks 中我们可以做很多事情,当然不只是 validate-commit-msg 哦。 更多细节请参考:validate-commit-msg

六、Commit 规范的作用

  1. 提供更多的信息,方便排查与回退;
  2. 过滤关键字,迅速定位;
  3. 方便生成文档。

七、生成 Change log

正如上文提到的生成文档,如果我们的提交都按照规范的话,那就很简单了。生成的文档包括以下三个部分:

  • New features
  • Bug fixes
  • Breaking changes

每个部分都会罗列相关的 commit ,并且有指向这些 commit 的链接。当然,生成的文档允许手动修改,所以发布前,你还可以添加其他内容。 这里需要使用工具 Conventional Changelog 生成 Change log :

npm install -g conventional-changelog

cd jartto-domo

conventional-changelog -p angular -i CHANGELOG.md -w

为了方便使用,可以将其写入 package.json 的 scripts 字段。

{
    "scripts": {

        "changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
    }
} 

这样,使用起来就很简单了:

npm run changelog

到这里,我们所有的问题都搞明白了。

八、总结

看完文章,你还会如此放荡不羁吗?你还会随心所欲的编写 Commit 吗?你还会如此 git commit -m “hello jartto” 提交吗? 答案是否定的,因为使用了钩子函数,你没有机会了,否则将是无穷无尽的恢复 Commit。这倒可以养成良好的提交习惯。

(完)

原文链接

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Git 提交规范

    如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你。可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项目就被糟践了。...

    前朝楚水
  • 你可能会忽略的 Git 提交规范

    来源:http://jartto.wang/2018/07/08/git-commit/?hmsr=toutiao.io&utm_medium=toutiao....

    程序猿DD
  • 你可能会忽略的 Git 提交规范

    一直是 ESLint 的忠实用户,深知规范的重要性。然而,在新项目交接中,我被 Git Commit 规范逼疯了。才意识到自己的疏忽,于是便有了一探究竟的想法。

    DevOps时代
  • 你可能会忽略的 Git 提交规范

    如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你。可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项目就被糟践了。...

    ITer.996
  • git commit 提交规范

    如果修复的这个BUG只影响当前修改的文件,可不加范围。如果影响的范围比较大,要加上范围描述。

    谭光志
  • 运维开发:你可能会忽略的 Git 提交规范

    如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你。可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项目就被糟践了。...

    小小科
  • Git提交规范流程和解决冲突实际使用

    前言:GIT对于我们程序员来说是吃饭的工具,本篇主要是针对提交和分支以及对于大多数程序员闻风丧胆的冲突一些个人见解,如果有啥不对的或者你们公司git提交流程欢迎...

    王念博客
  • Git提交日志规范

    对于版本控制工具来说,尤为重要的就是每次提交版本到代码库的日志撰写。清晰、规范、格式化的提交日志有助于追踪版本修改,查看历史记录等。 Git 不允许提交日志为空...

    撸码那些事
  • Git提交代码规范

    Git 每次提交代码,都是需要写 Commit message(提交说明),否则就不允许提交。

    DataScience
  • git提交代码规范

    在我们向github仓库提交代码时,git commit命令是不可缺少的。我们在commit时需要附带一些提交信息,否则将禁止提交。

    不作声
  • Git 提交信息规范

    每次提交,commit message 都包括三个部分:Header,Body 和 Footer。

    文渊同学
  • 别乱提交代码了,看下大厂 Git 提交规范是怎么做的!

    git是现在市面上最流行的版本控制工具,书写良好的commit message能大大提高代码维护的效率。但是在日常开发中由于缺少对于commit message...

    搜云库技术团队
  • 别乱提交代码了,看下大厂 Git 提交规范是怎么做的!

    现在市面上比较流行的方案是约定式提交规范(Conventional Commits),它受到了Angular提交准则的启发,并在很大程度上以其为依据。约定式提交...

    Erwin
  • 别乱提交代码了,看下大厂 Git 提交规范是怎么做的

    现在市面上比较流行的方案是约定式提交规范(Conventional Commits),它受到了Angular提交准则的启发,并在很大程度上以其为依据。约定式提交...

    IT大咖说
  • 别乱提交代码了,看下大厂 Git 提交规范是怎么做的!

    现在市面上比较流行的方案是约定式提交规范(Conventional Commits),它受到了Angular提交准则的启发,并在很大程度上以其为依据。约定式提交...

    芋道源码
  • Git提交信息规范化

    message信息格式采用目前主流的Angular规范,这是目前使用最广的写法,比较合理和系统化,并且有配套的工具。

    奋飛
  • Git提交信息规范Git Commit Message

    目前规范使用较多的是引用或衍生  Github Angular开发中<提交信息准则>章节(Commit Message Guidelines).以下为规范译文:

    gigiwangs
  • SAP Spartacus 代码提交的git message规范

    We like you to use other prefixes, such as chore, refactor, ci, testing as those...

    Jerry Wang
  • commit 规范性提交

    西南_张家辉

扫码关注云+社区

领取腾讯云代金券