【转】优雅的提交你的git message

git提交注释规范插件 1、前言 为什么要注重代码提交规范? 在团队协作开发时,每个人提交代码时都会写 commit message。 每个人都有自己的书写风格,翻看我们组的git log, 可以说是五花八门,十分不利于阅读和维护。 一般项目开发都是多分支共存,master、develop、feature、hotfix、release等分支,在这么多分支中,我们会有一个稳定的master分支,但是我们需要将分支代码进行merge。存在规范的commit message可以帮助我们很轻松的合并代码以及发现问题。例如使用Jenkins 阅读详情

本文转载自 https://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html

Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交。


$ git commit -m "hello world"

上面代码的-m参数,就是用来指定 commit mesage 的。

如果一行不够,可以只执行git commit,就会跳出文本编辑器,让你写多行。


$ git commit

基本上,你写什么都行(这里,这里和这里)。

但是,一般来说,commit message 应该清晰明了,说明本次提交的目的。

目前,社区有多种 Commit message 的写法规范。本文介绍Angular 规范(见上图),这是目前使用最广的写法,比较合理和系统化,并且有配套的工具。

一、Commit message 的作用

格式化的Commit message,有几个好处。

(1)提供更多的历史信息,方便快速浏览。

比如,下面的命令显示上次发布后的变动,每个commit占据一行。你只看行首,就知道某次 commit 的目的。


$ git log <last tag> HEAD --pretty=format:%s

(2)可以过滤某些commit(比如文档改动),便于快速查找信息。

比如,下面的命令仅仅显示本次发布新增加的功能。


$ git log <last release> HEAD --grep feature

(3)可以直接从commit生成Change log。

Change Log 是发布新版本时,用来说明与上一个版本差异的文档,详见后文。

二、Commit message 的格式

每次提交,Commit message 都包括三个部分:Header,Body 和 Footer。


<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

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

不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。这是为了避免自动换行影响美观。

2.1 Header

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

(1)type

type用于说明 commit 的类别,只允许使用下面7个标识。

  • feat:新功能(feature)
  • fix:修补bug
  • docs:文档(documentation)
  • style: 格式(不影响代码运行的变动)
  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
  • test:增加测试
  • chore:构建过程或辅助工具的变动

如果type为feat和fix,则该 commit 将肯定出现在 Change log 之中。其他情况(docs、chore、style、refactor、test)由你决定,要不要放入 Change log,建议是不要。

(2)scope

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

(3)subject

subject是 commit 目的的简短描述,不超过50个字符。

  • 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
  • 第一个字母小写
  • 结尾不加句号(.)

2.2 Body

Body 部分是对本次 commit 的详细描述,可以分成多行。下面是一个范例。


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

有两个注意点。

(1)使用第一人称现在时,比如使用change而不是changed或changes。

(2)应该说明代码变动的动机,以及与以前行为的对比。

2.3 Footer

Footer 部分只用于两种情况。

(1)不兼容变动

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


BREAKING CHANGE: isolate scope bindings definition has changed.

    To migrate the code follow the example below:

    Before:

    scope: {
      myAttr: 'attribute',
    }

    After:

    scope: {
      myAttr: '@',
    }

    The removed `inject` wasn't generaly useful for directives so there should be no code using it.

(2)关闭 Issue

如果当前 commit 针对某个issue,那么可以在 Footer 部分关闭这个 issue 。


Closes #234

也可以一次关闭多个 issue 。


Closes #123, #245, #992

2.4 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小标题下面。

三、Commitizen

Commitizen是一个撰写合格 Commit message 的工具。

安装命令如下。


$ npm install -g commitizen

然后,在项目目录里,运行下面的命令,使其支持 Angular 的 Commit message 格式。


$ commitizen init cz-conventional-changelog --save --save-exact

以后,凡是用到git commit命令,一律改为使用git cz。这时,就会出现选项,用来生成符合格式的 Commit message。

四、validate-commit-msg

validate-commit-msg 用于检查 Node 项目的 Commit message 是否符合格式。

它的安装是手动的。首先,拷贝下面这个JS文件,放入你的代码库。文件名可以取为validate-commit-msg.js。

接着,把这个脚本加入 Git 的 hook。下面是在package.json里面使用 ghooks,把这个脚本加为commit-msg时运行。


  "config": {
    "ghooks": {
      "commit-msg": "./validate-commit-msg.js"
    }
  }

然后,每次git commit的时候,这个脚本就会自动检查 Commit message 是否合格。如果不合格,就会报错。


$ git add -A 
$ git commit -m "edit markdown" 
INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" ! was: edit markdown

五、生成 Change log

如果你的所有 Commit 都符合 Angular 格式,那么发布新版本时, Change log 就可以用脚本自动生成(例1,例2,例3)。

生成的文档包括以下三个部分。

  • New features
  • Bug fixes
  • Breaking changes.

每个部分都会罗列相关的 commit ,并且有指向这些 commit 的链接。当然,生成的文档允许手动修改,所以发布前,你还可以添加其他内容。

conventional-changelog 就是生成 Change log 的工具,运行下面的命令即可。


$ npm install -g conventional-changelog
$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -w

上面命令不会覆盖以前的 Change log,只会在CHANGELOG.md的头部加上自从上次发布以来的变动。

如果你想生成所有发布的 Change log,要改为运行下面的命令。


$ conventional-changelog -p angular -i CHANGELOG.md -w -r 0

为了方便使用,可以将其写入package.json的scripts字段。


{
  "scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
  }
}

以后,直接运行下面的命令即可。


$ npm run changelog

(完)

文档信息

  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 发表日期: 2016年1月 6日
git commit message编写指南 0. Commit message编写指南 【声明】参考angular代码规范及部分博客整理,仅学习记录,非商用。 1. 概述 日常开发中使用 git 提交代码要求一定要写 git commit message,否则就无提交代码。 commit message作为改动说明,保存在 commit 历史中,方便回溯。 规范的 log 不仅有助于他人 review, 还可以有效的输出 CHANGELOG,甚至对于项目的研发质量都有很大的提升。 规范git commit到底有哪些好处呢? 便于程序员对提交历史进 阅读详情

相关推荐

【知识整理】Git Commit Message 规范

前面咱们整理过Code Review 一文,提到了 Review 的重要性,已经同过gitlab进行CodeReview 的方式,那么本文详细说明一下对CodeReivew非常重要的Git Commit Message 规范。我们在每次提交代码时,都需要编写 Commit Message,否则是不允许提交的。书写好的 Commit Message 能大大提高代码维护的效率。避免开发人员在项目中群魔乱舞,搞得代码一团糟,搞的项目就被糟践了。且开发日后的维护,都将是灾难。

李木 3614

【代码规范】git提交规范--附idea插件分享

目录前言git提交规范提交格式type参数介绍示例idea提交规范插件 前言 git作为当前最为火热的开源分布式版本控制系统,能够在团队协作中极大的提升合作效率。而高效的协作离不开规范化的管理,在提交代码时规范化能够在后续出现问题的时候能快速回溯起因,也能更清晰的观察到整个项目的开发情况。 git提交规范 提交格式 type(scope):message type参数介绍 type:指的代码提交类型,不同的提交类型表示对应不同的代码改动 feat:提交新的功能 fix:bug的修复 docs:文档格.

代码瞬间移动工程师的博客 3458

Git 笔记:将两个提交合并为一个

目录 一、背景介绍

jerechen的博客 1万+

idea git commit插件及注释模板修改

git commit template

weixin_43075758的博客 3336

fluent linux运行算例,Fluent算例精选|03利用VOF和蒸发-冷凝模型

通过学习本算例您将获得?1、学会基本的VOF模型设置流程2、学会利用蒸发-冷凝模型来模拟传热沸腾目录1摘要42传热沸腾模型介绍43前处理44求解设置54.1启动Fluent54.2网格缩放64.3求解器设置74.4多相流模型设置84.5能量方程求解设置94.6紊流模型设置104.7添加材料114.8多相流中相设置124.9操作条件设置144.10边界条件设置154.10.1heatsource边界...

weixin_33278819的博客 3186

PADS Logic VX2.5元件绘制全流程:从零开始创建自定义元件库

本文详细介绍了在PADS Logic VX2.5中从零开始创建自定义元件库的全流程。内容包括理解PADS独特的四库分立结构、绘制原理图符号(CAE封装)、关联PCB封装、创建元件类型以及最终的调用验证。掌握元件绘制技能能从根本上提升设计效率、确保设计规范统一,并从源头杜绝原理图与PCB之间的关联错误,是硬件工程师必备的核心能力。

oo7890的博客 441

Git 提交规范:写出优雅而高效的 Commit Message

本文介绍了Git提交规范的重要性及Conventional Commits标准。规范的Commit Message能提供清晰历史记录、加快Code Review、自动生成文档并方便团队协作。文章详细解析了提交信息的Header(类型/范围/主题)、Body(变更说明)和Footer(重大变更/Issue关联)三部分格式要求,并提供了完整示例。最后推荐了Commitizen、Husky和commitlint等自动化工具来帮助团队实践这一规范,强调规范的提交信息对提升开发效率和项目维护至关重要。

qq_52272700的博客 990

海康威视Web3.0插件实战:快速部署摄像头实时预览方案

本文详细介绍了海康威视Web3.0插件的实战应用,包括快速部署摄像头实时预览方案的完整流程。从插件下载安装到摄像头连接配置,再到浏览器兼容性解决方案,帮助开发者和IT人员高效实现网页端监控功能。特别针对预览功能调优和多摄像头管理等高级应用提供了实用技巧。

weixin_29266679的博客 346

如何优雅提交 Git Commit Message

commitizen git commit 格式化工具, 为我们提供标准化的 commit 信息。帮助我们统一项目commit , 便于信息的回溯或日志的生成。# commit message 格式commitizen 只是提供一个commit 格式化或交互工具, 最终需要输出符合 commit 规则的信息给 git, 所以需要线了解 commit 格式规则如果 Angular 的规范不符合我们的实际,同样我们也可以通过定制一套符合自己或者团队的规范。同时package.json需要修改。

ReturnTmp的博客 569

ROS2 Control实战:多机器人仿真与控制器管理

本文详细介绍了ROS2 Control在多机器人仿真中的应用,涵盖命名空间配置、控制器管理及性能优化。通过Gazebo仿真环境和ROS2 Control框架,开发者可以高效管理多个机器人的硬件抽象和控制器,实现资源隔离与平滑切换。文章还提供了常见问题排查和调试工具推荐,助力机器人开发实践。

u9v0w的博客 203

CANoe数据回放实战:如何用Replay Block精准复现实车故障(附ECU数据处理技巧)

本文深入探讨了利用CANoe的Replay Block功能进行数据回放,以精准复现实车偶发性故障的实战方法。文章重点解析了从原始OBD日志中移除目标ECU数据、转换报文方向等核心数据处理技巧,旨在帮助工程师重构真实的网络测试环境,从而高效定位并解决复杂的ECU问题。

nnn11的博客 496

如何编写一个优雅的commit message

一个优雅的在软件开发中具有多方面的作用,团队成员可以通过提交信息了解彼此的工作进度和更改内容,减少误解和冲突,也有助于代码审查者更快地理解提交的内容,从而提供更有效的反馈。同时,提交信息也可以作为讨论和改进代码的起点。除此之外,随着时间的推移,项目的开发历史会变得复杂和庞大。优雅的提交信息可以作为一个详细的、可搜索的历史记录,帮助开发者回顾过去的决策、修复回归问题以及理解系统的演进过程。那么就从现在开始,尝试着将自己的commit message编写的更加优雅。

做兴趣使然的Hero 1252

C# 上位机高级功能实战:报警、历史回放与远程监控

本文介绍了工业上位机系统的高级功能实现,主要包括实时报警机制、历史数据回放和远程监控三部分。报警功能通过阈值检测实现异常提醒;历史回放利用数据库存储数据,通过定时器控制回放进度;远程监控提供TCP、WebSocket等多种数据传输方式。文章还给出了综合优化建议,如异步处理、报警去抖动等,最终形成一个包含数据采集、显示、存储、报表及高级功能的完整工业自动化闭环系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 751

优雅的提交你的 Git Commit Message

commit message 是开发的日常操作, 写好 log 不仅有助于他人 review, 还可以有效的输出 CHANGELOG, 对项目的管理实际至关重要, 但是实际工作中却常常被大家忽略. 希望通过本文, 能够帮助大家重视和规范 commit message 的书写. 起因 知乎上有个问题: 如何写好 Git commit log? 很有意思, 能看到各种提交风格: 有用 emoj...

良知犹存的博客 573

数据结构课程设计C/C++版--美团餐馆预定信息的管理与分析 1 2

本关任务:从文件user.txt中读取用户信息,包括账号、密码、联系方式等,创建一个用户信息的顺序表,根据账号判断顺序表中是否存在当前用户。如果存在,则添加失败。否则,判断输入的用户信息中是否有非法输入,若有则添加失败,否则将该用户作为新结点,按顺序插入到顺序表的相应位置,并将用户顺序表写入user.txt中。本关任务:从文件user.txt中读取用户信息,存入顺序表中。输入待查找的用户账号,调用折半查找算法判断用户顺序表中是否存在该用户的账号信息。如果存在,则返回其在顺序表中的位置,说明查找成功;

m0_62222486的博客 4940

FineReport实战-- 国内外各地区销售数据分析 多个图表联动

进行国内外各地区业务员销售数据分析是一项复杂但极具价值的任务,它可以帮助企业了解不同市场的表现,并据此调整销售策略以提高整体绩效。实现功能:同一个报表里面多个图表联动问题。

Davina_yu的博客 1199

【Git】优雅的提交代码

你在提交代码时,可能会遇到这样的问题:提交完代码后,发现代码里混进了别人的内容,特别是用了 `git pull` 合并后。这会让你的提交看起来很乱,别人也分不清哪些是你的修改。这个时候,你可以使用 `git pull --rebase` 代替普通的 `git pull`

提笔忘字的帝国 788

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

优雅的Git Commit Message

源起 不知道大家看到那些非常随意的提交信息会有什么感受,这里可以上一个图给大家感受一下。会不会觉得太过于潇洒和随便了。完全看不出做了哪些变更,在项目正常运作时还好,一旦需要回滚,就很难寻找版本了。 所以,不管是团队开发还是个人开发,遵循统一合理的提交规范是很有必要的,毕竟没有人能记得住一年前的代码吧。 Git Commit Message规范 <type>(<scope>): <subject> 下面分别介绍这几个参数的具体含义和规范 &lt...

guanguan0_0的博客 357

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Git学习 - Git优雅的提交你的修改

Git学习 - 优雅的提交你的修改 git commit 命令详解: git commit file1.name file2.name file3.name … -m “commit message” commit 指提交修改到本地的仓库,file*.name 指的是需要commit的文件, -m后面的内容指的是提交的休息,即备注; git commit -a -m “commit message” 添加的 -a 参数会把当前暂存区里所有的修改(包括删除操作)都提交,但是那些尚未添加到暂存

youchitang的博客 346

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Git amend:修改最近一次提交

Git 中允许修改已经提交的commit,包括最近一次提交以及最近多次提交。修改最近多次提交比较复杂,以后会有介绍。本文主要是解释下开发过程中遇到频次比较高的修改最近一次提交amend命令。 从一个简单的例子入手。 # 初始化一个git项目 git init # 添加一个文件,并输入一些内容 vim a.txt 之后提交当前文件 # 暂存 git add . # 提交 git commit -m "v1" 可以看到当前的状态,我这里使用了可视化的工具sourcetree 接着,比如我有做了一些调整,

胡聊前端的博客 4791

3分钟搞定!Windows环境下Git提交模板定制指南:从混乱到规范的优雅转身

你是否还在为团队提交信息五花八门而头疼?是否经常因为 commit 信息模糊不清,导致后期代码维护如同解谜?本文将带你在 Windows 环境下,通过简单三步实现 Git 提交模板(Commit Template)的定制与应用,让团队提交记录从此清晰规范,协作效率飙升30%!读完本文,你将掌握模板创建、全局配置和多场景适配的全流程技巧,并获取可直接复用的模板文件。 ## 一、为什么需要提交模板?...

gitblog_00298的博客 881

优雅的git commit

npm install -g commitizen

一行真人 802

如何优雅的编写git的提交信息

前言在公司的日常工作当中或者个人的开源项目,将代码提交到代码库时。都会遇到下面这样的对话框,通常都会随便写点内容在里面。当遇到问题需要回溯的时候就成了给自己造成的麻烦,因为无法通过commit message来非常直观的看到这一次提交了什么,做了哪些修改。这个时候只能一个一个文件打开来看。这个时候如果有规范的提交将会减少不必要的麻烦。概述约定式提交规范是一种基于提交信息的...

zls365365的博客 330

Git 版本控制必备:如何优雅地使用 git commit命令

Git 作为一种强大的版本控制工具,其核心之一便是 git commit 命令。本文将深入探讨 git commit 的基本概念、命令格式及其在项目管理中的应用,通过了解其背后的逻辑与技巧,开发者能够更有效地控制版本、维护代码的整洁与可追溯性。通过系统地掌握这些知识,我们将能够更自信地应对团队协同开发中遇到的各种挑战。

Lion_Long的博客 2万+
上一篇: nginx流量攻击的防范
下一篇: [转]性能调优攻略
LinuxG_G
博客等级 码龄15年 58粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值