首页 > 其他分享 >Git Commit Message 应该怎么写?

Git Commit Message 应该怎么写?

时间:2023-04-02 11:34:22浏览次数:53  
标签:Body Git 代码 提交 commit Commit Message Issue

原文链接: Git Commit Message 应该怎么写?

最近被同事吐槽了,说我代码提交说明写的太差。其实都不用他吐槽,我自己心里也非常清楚。毕竟很多时候犯懒,都是直接一个 -m "fix" 就提交上去了。

这样做是非常不好的,我也是自食恶果,深受其害。特别是查看历史提交记录时,想通过提交说明来了解当时的功能变更,基本不可能,都得点进去看代码才行。

所以这两天看了一些如何写好提交说明的资料,系统地学习了一下。虽然团队没有这方面的要求,但是想要进步,得对自己提更高的要求才行。

一般使用 git 提交代码的话,可以使用 -m 参数来指定提交说明,比如:

$ git commit -m "hello world"

如果一行不够,可以只执行 git commit,这样就会跳出文本编辑器来写多行:

$ git commit

Commit Message 格式

Commit Message 包括三个部分:Header,Body 和 Footer。

<Header>

<Body>

<Footer>

其中,Header 是必需的,Body 和 Footer 可以省略。

Header 部分只有一行,包括三个字段:type(必需)、scope(可选)、subject(必需)。

<type>(<scope>): <subject>

type

type 用于说明 commit 的类别,具体的标识如下:

  • feat:一个新的功能(feature);
  • fix:修复 bug;
  • docs:修改文档,比如 README.md、CHANGELOG.md 等;
  • style:修改代码的格式,不影响代码运行的变动,比如空格、格式化代码、补齐句末分号等等;
  • refactor:代码重构,没有新功能的添加以及 bug 修复的代码改动;
  • perf:优化代码以提高性能;
  • test:增加测试或优化改善现有的测试;
  • build:修改影响项目构建文件或外部依赖项,比如 npm、gulp、webpack、broccoli 等;
  • ci:修改 CI 配置文件和脚本;
  • chore:其他非 src 路径文件和测试文件的修改,比如 .gitignore、.editorconfig 等;
  • revert:代码回退;

scope

scope 用于说明 commit 的影响范围,比如数据层、控制层、视图层等等,视项目不同而不同。

如果你的修改影响了不止一个 scope,就可以使用 * 代替。

subject

subject 是 commit 目的的简单描述,不超过 50 个字符,结尾不需要句号。

Body

Body 部分是对本次 commit 的详细描述,可以分多行。

Body 部分应该说明代码变动的动机,以及与以前行为的对比。

More detailed explanatory text, if necessary.  Wrap it to
about 72 characters or so.

Further paragraphs come after blank lines.

- Bullet points are okay, too
- Use a hanging indent

Footer 部分主要用于两种情况:不兼容变动和处理 Issue。

不兼容变动

如果当前代码与上一个版本不兼容,则 Footer 部分以 BREAKING CHANGE: 开头,后面就是对变动的描述、以及变动理由和迁移方法。

BREAKING CHANGE: Previously, $compileProvider.preAssignBindingsEnabled was set to true by default. This means bindings were pre-assigned in component constructors. In Angular 1.5+ the place to put the initialization logic relying on bindings being present is the controller $onInit method.

To migrate follow the example below:

Before:

​```js
angular.module('myApp', [])
    .component('myComponent', {
        bindings: {value: '<'},
        controller: function() {
        this.doubleValue = this.value * 2;
    }
});
​```

After:
​```js
angular.module('myApp', [])
    .component('myComponent', {
        bindings: {value: '<'},
        controller: function() {
            this.$onInit = function() {
                this.doubleValue = this.value * 2;
            };
        };
        this.doubleValue = this.value * 2;
    }
});
​```

Don't do this if you're writing a library, though, as you shouldn't change global configuration then.

处理 Issue

处理 Issue 分为两种情况,分别是关联 Issue 和关闭 Issue。

比如本次提交如果和某个 issue 有关系:

Issue #1, #2, #3

如果当前提交信息解决了某个 issue:

Close #1, #2, #3

Revert

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

revert: feat(pencil): add 'graphiteWidth' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.

Body 部分的格式是固定的,必须写成 This reverts commit &lt;hash>.,其中 hash 是被撤销 commit 的 SHA 标识符。

如果当前 commit 与被撤销的 commit,在同一个发布(release)里面,那么它们都不会出现在 Change log 里面。如果两者在不同的发布,那么当前 commit,会出现在 Change log 的 Reverts 小标题下面。

最后来看一个例子,算是一个总结,至于具体内容还是要根据实际情况来填写。

feat: 添加了分享功能

给每篇博文添加了分享功能

- 添加分享到微博功能
- 添加分享到微信功能
- 添加分享到朋友圈功能

Issue #1, #2
Close #1

插件推荐

有了这些规范,也知道怎么写了,但是不是会担心记不住呢?不要怕,有插件可以用,如果使用 VsCode 的话,可以安装一个叫 Commit Message Editor 的插件。

可以根据提示信息直接写:

也可以使用表单的方式,有选项可以选择:

这样不仅可以很方便地写提交说明了,还可以使提交说明更加的规范。

以上就是本文的全部内容,如果觉得还不错的话欢迎点赞转发关注,感谢支持。


参考文章:

推荐阅读:

标签:Body,Git,代码,提交,commit,Commit,Message,Issue
From: https://www.cnblogs.com/alwaysbeta/p/17280127.html

相关文章

  • Git问题篇:Merge冲突解决办法以及版本回溯
    在做软构实验lab1,使用git进行版本管理的时候遇到的问题。因为我使用两个设备进行学习,因此在这当中涉及到两方本地版本库的更新问题,出现问题的原因:我在使用p1设备的时候在未gitpull更新本地版本库的前提下进行了Code,因此在完成修改进行gitpush的时候出现了mergeconflict......
  • 将本地代码上传至Gitee
    1、将代码和README.md文件放在同一个文件夹下 2、在该文件夹下打开git窗口,并创建本地仓库//初始化本地仓库gitinit//查看本地仓库状态gitstatus 3、将项目提交到仓库gitadd--allgitcommit-m“SwaggerDemo” 4、将代码上传至Gitee//将Gitee上的仓库和......
  • overcommit_memory的简单学习
    overcommit_memory的简单学习背景前几天一个测试环境启动失败.总是有如下的提示:Nativememoryallocation(mmap)failedtomap12288bytesforcommittingreservedmemory.当时看free其实内存剩余总量还是有的.但是JVM启动总是失败.当时没有考虑太多.改了下参数......
  • Git提交本地项目到云端仓库(学习理解持续更新)
    进入项目文件夹初始化本地仓库gitinit把所有文件添加到版本库中gitadd.查看添加的文件gitstatus......
  • git 报Failed to connect to 127.0.0.1 port 1081: Connection refused
    我遇到这个问题是我用了全局代理。导致了端口被占用了。提示的错误是 Failedtoconnectto127.0.0.1port1081:Connectionrefused解决办法:windows和mac都适用第一步查询是否使用了代理: 输入:gitconfig--globalhttp.proxy  你就会看到被占用的端口和报错的一......
  • AI写代码 GitHub Copilot + Idea 安装和使用教程
    GitHubCopilot是微软与OpenAI共同推出的一款AI编程工具,基于GitHub及其他网站的源代码,根据上文提示为程序员自动编写下文代码,可以极大地提高编写代码的效率。根据已有上下文补全代码根据函数名和参数,生成方法体根据注释自动生成代码代码优化生成测试代码一、GitHubCopil......
  • Visual Studio Code 1.77 发布,扩展的 GitHub Copilot 集成
    VSCode1.77已发布,此版本一些主要亮点包括:Accessibility改进 -用于悬停、通知和StickyScroll的新键盘快捷键。、down、home、end、pageup和pagedown 键来聚焦悬停控件并进行水平和垂直滚动。聚焦悬停控件的键盘快捷键(Ctrl+KCtrl+I)与用于在主光标位置显示悬停的......
  • 使用git子模块管理项目
    使用git子模块管理项目简介开发过程中,往往需要将将项目拆分成不同的模块,Git子模块(gitsubmodule)可以协助我们高效地进行项目管理。另外,子模块的思想也能够强化模块间的独立性,显著降低模块间的耦合度。参考链接官方文档:https://git-scm.com/book/zh/v2/Git-工具-子模块<br>......
  • GitHub OAuth 第三方登录示例
     ⇐  ⇒GitHubOAuth第三方登录示例教程作者:阮一峰日期:2019年4月21日这组OAuth系列教程,第一篇介绍了基本概念,第二篇介绍了获取令牌的四种方式,今天演示一个实例,如何通过OAuth获取API数据。很多网站登录时,允许使用第三方网站的身份,这称为"第三......
  • git 分支管理方案
    现有一般的公司项目均使用git(大多数是gitLab)管理。开发组我们的项目都要建立在开发组的名下(git.xxcompany.com/xxgroup),除需要公司内部开源的项目,都必须设置为 私有(private) ,只对团队内部开源。sshkey使用前建议大家在本地用自己的公司邮箱配置sshkey,并讲sshkey添加到git系统......