Git Commit 规范

2022-05-03  本文已影响0人  程序员札记

背景

在软件开发流程中,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

<header>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

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

Header

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

<type>(<scope>): <summary>

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

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

fix(Controller): request url map typo

Body

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

Footer

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

BREAKING CHANGE: <breaking change summary>
<BLANK LINE>
<breaking change description + migration instructions>
<BLANK LINE>
<BLANK LINE>
Fixes #<issue number>
DEPRECATED: <what is deprecated>
<BLANK LINE>
<deprecation description + recommended update path>
<BLANK LINE>
<BLANK LINE>
Closes #<pr number>

Revert

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

revert: fix(Controller): request url map typo

This reverts commit {commit hash id}

Commit message的使用

总结

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

上一篇 下一篇

猜你喜欢

热点阅读