美文网首页
Git Commit 规范

Git Commit 规范

作者: 程序员札记 | 来源:发表于2022-05-03 23:07 被阅读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>
  • 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: <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的使用

  • 提供更多的Git History信息

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

  • 快速查找Commit信息

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

    git log <last release> HEAD --grep perf

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

总结

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

相关文章

  • 使用 git hook 规范 Android 项目

    引言 本文所说的『规范』包含两个部分 git commit 是注释的规范 git commit 时对代码规范的检查...

  • git commit规范

    git commit规范 git-commit规范 在多人协作项目中,如果代码风格统一、代码提交信息的说明准确,那...

  • gitflow 规范及工具整理

    gitflow 进阶规范 git cz 通过工具 git-cz 规范 git commit 提交信息。 使用 gi...

  • GIT 规范

    git 规范 git 规范一般包括两点:分支管理规范和 git commit 规范。 分支管理规范 一个项目可以创...

  • git操作

    git规范 Git 使用规范流程 团队中的 Git 实践 Git: 教你如何在Commit时有话可说 Git工作流...

  • Git Commit message(Angular规范)

    Git Commit message(Angular规范) Commit message 的格式 1. Heade...

  • git commit 提交规范(优化)

    git commit 提交模板和规范 Git每次提交代码,都要写 Commit message(提交说明),否则就...

  • 用 git 钩子,检测代码规范性(eslint、standard

    最终实现效果说明: 用 git commit 提交代码之前,利用 pre-commit git 钩子,实现代码规范...

  • git提交规范

    git的规范和相关科普知识 git commit 的规范要求(参考Angular团队) message格式如下: ...

  • 我的git学习日志

    关于提交规范(git commit conventions) 参考文献: 你可能会忽略的 Git 提交规范Comm...

网友评论

      本文标题:Git Commit 规范

      本文链接:https://www.haomeiwen.com/subject/dgakdrtx.html