一个很好的git commit历史很容易帮助自己在code review的时候知道自己做了什么修改。在一段时间之前,我很喜欢使用以下格式,即一个emoji表情加一段文字说明。
1 | :bug: Fix torrent link return miss.... |
摘自: https://github.com/Rhilip/Pt-Autoseed/commit/e776a9c19788d022e2d095fbebafe7705d154ca4
通过emoji表情,可以快速的定位到主要修改的作用,而文字也起到补充作用说明了。例如上面的例子就是一个bug fix,修复了链接丢失的情况。
详细的emoji表情列表可以参考以下两个网站:
- git commit message emoji 使用指南: https://github.com/liuchengxu/git-commit-emoji-cn
- gitmoji | An emoji guide for your commit messages: https://gitmoji.carloscuesta.me/
而随着我开始写RidPT这个系统性的大工程时,以及当我需要自动化的生成CHANGELOG.md的时候,纯粹的emoji表情+文字说明变得不够方便。于是,我将目标瞄向了根据git commit log自动生成CHANGELOG的工具上,于是发现了这个 git-chglog。
安装 git-chglog
git-chglog: https://github.com/git-chglog/git-chglog
作为使用go编写的跨平台工具,git-chglog的安装十分方便,只需要下载编译好的二进制文件,并将其放到$PATH中即可。
本人最近使用scoop作为Windows平台下软件包的管理工具。在本处介绍下scoop的安装方法。也十分简单。。。。装完scoop之后直接使用scoop install git-chglog即可,且会自动将其放入$PATH而不需要手动添加,过程如下:

git-chglog使用
在食用前请看下大神写的 commit message介绍: https://github.com/pvdlg/conventional-commit-types
,以对于commit格式有所了解。
在git仓库中使用git-chglog --init即可进入该软件的交互创建过程。这里我以ronggang/PT-Plugin-Plus为示例:

分别问了以下几个问题:
仓库地址 (What is the URL of your repository?): 直接回车就行,软件会读
.git目录下配置信息喜欢的样式(What is your favorite style?): 有
github, gitlab, bitbucket, none四种类型,一般根据你仓库托管的选就行。Commit样式(Choose the format of your favorite commit message):同样有多个选项,对信息提取的完备性依次下降。
1 | <type>(<scope>): <subject> -- feat(core): Add new feature |
- 生成
CHANGLOG.md的样式(What is your favorite template style?): 提供三个选项keep-a-changelog, standard, cool,以及参考示例。我观察了很久没发现大的区别,主要是commit的时间的位置以及样式不同。 - Merge是否显示(Do you include Merge Commit in CHANGELOG?): 根据需求选择y/n
- Revert是否显示(Do you include Revert Commit in CHANGELOG?): 根据需求选择y/n
- 配置
.chglog目录(In which directory do you output configuration files and templates?):默认即可,如果已经有重复文件存在会提示是否需要覆盖。
完成问题的回答之后,就可以使用git-chglog自动生成了。
如果并不带任何附加的话,默认是输出到stdout的,需要使用 git-chglog --output CHANGELOG.md 才能生成文件形式放在仓库根目录下。
PhpStorm中使用插件生成格式化commit信息
我们可以很简便的使用IDE的插件来生成格式化的commit信息,如我在PhpStorm中就使用Git Commit Template这款插件进行commit信息生成

在每个对话框中输入信息后就可以点击OK键,格式化的commit信息就自动的放入了Commit Message中。其生成的格式如下:
1 | <type>(<scope>): <subject> |
使用git hook在提交commit的时候更新CHANGELOG.md
但是每次都需要键入git-chglog的形式生成CHANGELOG.md过于麻烦,我们可以使用git hook的形式,用钩子在我们commit之前进行CHANGELOG.md的更新。
创建 /.git/hooks/pre-commit文件,内容如下
1 |
|
这样,CHANGELOG.md的自动更新就不用我们去手动管理了。
