Git Commit 规范

背景

在软件开发流程中,git或者其他的版本控制工具已经成为必不可少的一部分。Git每次提交代码都需要写commit message,否则不允许提交,一般来说commit message应该清晰明了,说明本次提交的目的,这对于之后bug定位,问题的分析都有很大的帮助。但是在日常开发中,大家的commit message都千奇百怪,fix issue,fix bug等等笼统不清晰的git message充斥在git history中,这就导致后续维护人员无法快速定位问题,有时甚至自己提交的代码都不知道是为什么,所以我们就需要一个规范来统一和管理commit message。

规范梳理

目前比较知名的规范是Angular的commit message规范 ,同时也有很多相对应的IDE插件,比如Intellij IDEA的Git Commit Template 来帮助实现规范。现在以Angular的规范为基础介绍一套较为通用的git commit message规范。

Commit Message Format

每一个commit message都应该包含header,body和footer。其中footer可以省略,但是header和body都不能为空。

Header

Header分为三个部分type, scope, summary,其中type和summary为必填项,scope可以省略,格式如下:

(): 
  • Type:

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

    • feat: 新功能(feature)。

    • fix: 修复bug,可以是QA发现的BUG,也可以是研发自己发现的BUG。

    • docs: 文档(documentation)。

    • style: 格式(不影响代码运行的变动)。

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

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

    • test: 增加测试。

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

    • revert: 回滚到上一个版本。

  • Scope

    Scope用于说明 commit 影响的范围,比如Controller、DAO、View等等,视项目不同而不同。例如在Angular中可以是:

    • animations
    • bazel
    • benchpress
    • common
    • compiler
    • compiler-cli
    • core
    • elements

等等,如果其中包含了多个scope,可以用逗'*'隔'。

  • Summary

    Summary是对commit的一个简短的描述,一般Git Commit Head总共不超过50个字符,所以summary必须精简。对于英文的commit summary,第一,要使用第一人称,现在时,比如change,不是changed也不是changes,第二,首字母无需大写,第三,句尾不要标点符号。中文除了时态,其他也一样。

根据上述规范git commit message header可以如下:

fix(Controller): request url map typo

Body

和Header中的summary一样。同时需要解释提交的动机,为什么需要更改,可以和之前的行为进行比较,来说明改动的影响等等。

Footer

Footer适用于当提交的改动包含了不可兼容变化或者弃用的变化,Footer部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法,同时可以把相关Github issue,JIRA ticket或者其他文档链接填入其中。例子如下:

BREAKING CHANGE: 




Fixes #
DEPRECATED: 




Closes #

Revert

还有一种特殊情况,如果当前commit用于撤销以前的commit,则必须以revert:开头,后面跟着被撤销commit的Header。

revert: fix(Controller): request url map typo

This reverts commit {commit hash id}

Commit message的使用

  • 提供更多的Git History信息

    当浏览Github Commit History页面时,只要看首行就可以知道某次的commit的目的,如果没有GUI工具,使用命令行工具使用 git log HEAD --pretty=format:%s 也能很方便清晰的浏览每次改动的信息。

  • 快速查找Commit信息

    用命令行工具,可以很方便的查找出,或者过滤出相关的commit

    git log HEAD --grep perf

    例如上面的命令,就可以迅速的查处所有perf,性能修改相关的commit。

总结

编码规范、流程规范在软件开发过程中是至关重要的,它可以使我们在开发过程中少走很多弯路。之所以写这篇文章,是因为笔者每次在填写commit message的时候都很纠结,明明知道随意写不好,但是又不知道什么样的commit message才是规范合适的。制定一个Git Commit规范,在提交时就会几乎不花费额外精力和时间,但在之后查找问题的效率却很高。同时可以结合IDE的Git Commit插件或者添加Git Hook来强制规范的执行。

你可能感兴趣的:(Git Commit 规范)