使用常规提交增强你的 git 日志
Git 是一个非常强大的工具,安装在我们大多数的机器上。作为开发者,我们每天都会使用它。但遗憾的是,乍一看,这个工具对开发者不太友好。这就是为什么很多人绕过命令行界面 (CLI),选择图形用户界面 (GUI)。
这就像使用一个框架,却不懂语言本身。一开始可能还好,但迟早会遇到问题。
让我们举个例子:
$ git log --oneline ./src/components/button/
daccff1f test should pass
3fff19f6 test should pass
5b998d9a add disabled property for button
06faab4d fix lint
186cce90 refactor button
4b99d91a fix spinner component
5b998d9a fix css
263288a5 test should pass
c3fb85af Create Button component
这段日志可能对你来说没什么问题。让我向你展示一下我在这个日志中发现的问题:
- 很难理解组件的历史。我们可能会重复已经修复的错误。
- 不必要的提交会污染日志,使历史记录难以读取。此外,诸如 之类的功能
git blame
也变得无关紧要。 - 似乎有几条提交添加了一个功能。如果我想撤销此操作,应该包含哪个提交?
4b99d9a
谈谈其他组件的问题。这是不必要的更改吗?再说一遍,如果我们需要回滚怎么办?- ...
我认为我们不应该git commit
与ctrl
+混淆s
。 Agit log
应该像读故事一样。通过阅读日志,我应该能够在大约 10 秒内了解整个文件历史记录。
如果我们有这样的事情会怎么样:
$ git log --oneline ./src/components/button/
06faab4d revert: feat: add disabled property
186cce90 feat: add disabled property
5b998d9a test: add scenario for readonly property
263288a5 fix: fix css when hover
c3fb85af feat: add button component
是不是简洁多了?
这就是所谓的“约定式提交”。
常规提交
约定式提交是Angular 团队制定的 Git 提交约定。基本上,每个拉取请求都应该以一次提交和一个标准化的提交消息结束。
该消息应遵循以下正则表达式:
/^(revert: )?(feat|fix|docs|style|refactor|perf|test|chore)(\(.+\))?: .{1,50}/
提交类型:
- feat:添加新功能(相当于语义版本控制
MINOR
中的)。 - fix:修复错误(相当于语义版本控制
PATCH
中的)。 - docs:文档更改。
- style:代码样式改变(分号、缩进……)。
- 重构:重构代码而不改变公共 API。
- perf:更新代码性能。
- 测试:向现有功能添加测试。
- 琐事:在不影响用户的情况下更新某些内容(例如:增加依赖项
package.json
)。
使用此约定的项目:Angular、Vue.js、Gatsby(几乎)、Lerna(几乎)、jest(几乎)。
好处
项目/代码可理解性
提交更具描述性,项目历史更容易理解。贡献代码也变得更加容易。
例如,我从未为 Angular 的 http 包做出过贡献。但是,阅读仓库的 git 日志可以帮助我更好地理解这个包的历史。
可用性
如果每次提交只执行一个操作,那么撤销更改就会变得更容易。如果发生 git 冲突,情况也是如此……
掌握 Git 技能。
并非所有 Git 仓库管理器都提供“压缩并合并”选项,有时您需要自行完成此操作。因此,您将学习如何“压缩”提交、如何“修复”提交、如何移除特定提交……
了解 Git 底层机制始终至关重要!
参见
- conventionalcommits.org
- Vue.js 提交约定
- github.com/conventional-changelog/conventional-changelog - 一个基于 git 消息生成变更日志的好工具。
- github.com/conventional-changelog/commitlint - 一个 git commit linter。与 Husky 一起使用。
最初发表于maxpou.fr。
文章来源:https://dev.to/maxpou/enhance-your-git-log-with-conventional-commits-3ea4