【译】Git Commit Message 格式约定

怎么写一个好的 Git commit message 网络上很多关于 commit message 的想法都来源于 tpope,在他看来,一个好的 Git commit messge 应该是这样的: Capitalized, short (50 chars or less) summary More detailed explanatory text, if necessary. Wrap it to about 72 chara 阅读详情

原文链接

目的

  1. 可以自动生成 CHANGELOG;
  2. 可以忽略通过git bisect生成的commit message;
  3. 为浏览提交历史提供更清晰的格式;

生成 CHANGELOG

在更改日志中使用这三个部分:新功能、bug修复、非后向兼容变更(breaking change)。

在发布版本时,这三个部分的内容可由脚本生成,并指向相关commit的链接。

当然,也可以在实际发布之前基于脚本生成骨架,手动编辑CHANGELOG的内容。

查看自上次发布以来所有提交主题(提交消息中的第一行)的列表:

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

查看当前版本中的新功能:

git log <last release> HEAD --grep feature

识别不重要的提交

一些格式更改(添加/删除空格/空行、缩进)、缺少分号、注释。因此,当查看代码变更内容时,可以忽略这些提交,因为这些提交中没有实际业务逻辑的变动。

在一起时,您可以忽略这些:

git bisect skip $(git rev-list --grep irrelevant <good place> HEAD)

为浏览提交历史提供更清晰的格式

这将添加一些 “上下文” 信息。

看看下面这些这些commit message 示例(来自Angular项目):

  • Fix small typo in docs widget (tutorial instructions)
  • Fix test for scenario.Application - should remove old iframe
  • docs - various doc fixes
  • docs - stripping extra new lines
  • Replaced double line break with single when text is fetched from Google
  • Added support for properties in documentation

上面这些消息都尝试指定更改的范围,但它们没有遵循任何约定。

再看看以下消息:

  • fix comment stripping
  • fixing broken links
  • Bit of refactoring
  • Check whether links do exist and throw exception
  • Fix sitemap include (to work on case sensitive linux)

你能明白这些信息说明了什么吗?它们没有指明修改的范围。

因此,也许像代码的一部分:docs, docs-parser, compiler, scenario-runner,…

当然,可以通过检查哪些文件被更改来找到此信息,但是效率很低。在查看git历史记录时,我可以看到我们都试图在message中指定修改范围,但只是缺少了约定。

提交消息的格式

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

<BLANK LINE>

<body>

<BLANK LINE>

<footer>

提交消息的任何行不能超过 100个字符!这允许消息更容易在 github 以及各种 git 工具中阅读。

提交消息由标头(第一行)、body和footer组成,用空白行分隔。

Revert
如果是还原以前的提交,则其标头应以"revert:"开始,后面跟着要还原提交的标题。在正文中,可以参考如下格式:“This revert commit <hash>”,其中哈希是正在还原的提交SHA。

消息标题
提交消息头一行称为标题,其中包含type(类型)、scope(可选 变更范围)和这次更改的简洁描述。

Allowed <type>

用type字段描述这次变更的主要类型。

  • feat (feature)
  • fix (bug fix)
  • docs (documentation)
  • style (formatting, missing semi colons, …)
  • refactor
  • test (when adding missing tests)
  • chore (maintain)
<scope>

范围可以是指定提交更改位置的任何东西。例如, l o c a t i o n , location, location,browser, c o m p i l e , compile, compile,rootScope、ngHref、ngClick、ngView 等…

如果没有更合适的范围,可以使用*。

<subject>文本

对这次提交的简洁描述

  • 使用现在时态的命令: “change” not “changed” nor “changes”
  • 不大写第一个字母
  • 末尾没有点.
消息正文
  • 就像 <subject> 使用的命令, 当前时态: “change” not “changed” nor “changes”
  • 包括更改的目的和与以前行为的对比

writing-git-commit-messages
a-note-about-git-commit-messages

消息页脚

重大更改

所有的非后向兼容更改必须作为页脚中的单独区域来提及,该更改应以"breaking change:" 一词开始。然后,提交消息的其余部分是更改、对齐和迁移注释的说明。

BREAKING CHANGE: isolate scope bindings definition has changed and
    the inject option for the directive controller injection was removed.

    To migrate the code follow the example below:

    Before:   

    scope: {
      myAttr: 'attribute',
      myBind: 'bind',
      myExpression: 'expression',
      myEval: 'evaluate',
      myAccessor: 'accessor'
    }

    After:

    scope: {
      myAttr: '@',
      myBind: '@',
      myExpression: '&',
      // myEval - usually not useful, but in cases where the expression is assignable, you can use '='
      myAccessor: '=' // in directive's template change myAccessor() to myAccessor
    }

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

Referencing issues

关闭bug类的提交应该单独列出被关闭的bug号并且以"Closes"开头

Closes #234

或者多个bug的情况

Closes #123, #245, #992

Examples

feat($browser): onUrlChange event (popstate/hashchange/polling)

Added new event to $browser:
- forward popstate event if available
- forward hashchange event if popstate not available
- do polling when neither popstate nor hashchange available

Breaks $browser.onHashChange, which was removed (use onUrlChange instead)

fix($compile): couple of unit tests for IE9

Older IEs serialize html uppercased, but IE9 does not...
Would be better to expect case insensitive, unfortunately jasmine does
not allow to user regexps for throw expectations.

Closes #392
Breaks foo.bar api, foo.baz should be used instead

feat(directive): ng:disabled, ng:checked, ng:multiple, ng:readonly, ng:selected

New directives for proper binding these attributes in older browsers (IE).
Added coresponding description, live examples and e2e tests.

Closes #351

style($location): add couple of missing semi colons

docs(guide): updated fixed docs from Google Docs

Couple of typos fixed:
- indentation
- batchLogbatchLog -> batchLog
- start periodic checking
- missing brace

feat($compile): simplify isolate scope bindings

Changed the isolate scope binding options to:
  - @attr - attribute binding (including interpolation)
  - =model - by-directional model binding
  - &expr - expression execution binding

This change simplifies the terminology as well as
number of choices available to the developer. It
also supports local name aliasing from the parent.


BREAKING CHANGE: isolate scope bindings definition has changed and
the inject option for the directive controller injection was removed.

To migrate the code follow the example below:

Before:

scope: {
  myAttr: 'attribute',
  myBind: 'bind',
  myExpression: 'expression',
  myEval: 'evaluate',
  myAccessor: 'accessor'
}

After:

scope: {

  myAttr: '@',
  myBind: '@',
  myExpression: '&',
  // myEval - usually not useful, but in cases where the expression is assignable, you can use '='
  myAccessor: '=' // in directive's template change myAccessor() to myAccessor
}

The removed `inject` wasn't generaly useful for directives so there should be no code using it.
【知识整理】Git Commit Message 规范 前面咱们整理过Code Review 一文,提到了 Review 的重要性,已经同过gitlab进行CodeReview 的方式,那么本文详细说明一下对CodeReivew非常重要的Git Commit Message 规范。我们在每次提交代码时,都需要编写 Commit Message,否则是不允许提交的。书写好的 Commit Message 能大大提高代码维护的效率。避免开发人员在项目中群魔乱舞,搞得代码一团糟,搞的项目就被糟践了。且开发日后的维护,都将是灾难。 阅读详情

相关推荐

好的Git Commit Msg应该怎么写?

git commit 是很小的一件事情,但是往往小的事情往往引不起大家的关注,不妨打开公司的 gitlab 上的任一个 repo,查看 commit log,满篇的 update 和 f...

咻咻ing的专栏 1283

Git 里面的 origin 到底代表啥意思?

git工作区 什么是origin?在解答之前,我们先来回顾下git的工作区、暂存区、git仓库基础概念。 git有三种状态:已提交(committed)、已修改(modified)和已暂存(staged): 已提交 数据已经安全的保存在本地数据库中 已修改 修改了文件,但是还没保存到数据库中,发生在工作区 已暂存 对修改的文件的当前版本做了标记,让他包含在下次提交的快照当中。发生在暂存区,英文叫stage 什么是origin 你的代码库(repository)可以存放在你的电脑里,同时你也可以把代码库托

m0_45406092的博客 1万+

CAD二次开发(C#版):从零搭建开发环境与核心DLL引用指南

本文详细介绍了使用C#进行CAD二次开发的环境搭建与核心DLL引用指南,涵盖Visual Studio配置、AutoCAD插件项目创建、DLL引用技巧及调试方法。通过实战示例和常见问题排查,帮助开发者快速掌握CAD二次开发的核心技术,提升开发效率。

weixin_28837817的博客 728

Git学习

文章目录一、git常用命令二、git基础原理三级目录 一、git常用命令 git init 基本用法:git init 用来初始化一个仓库,初始化后当前文件目录中会出现 .git隐藏文件目录,当前文件目录就是workspace(工作区)。 git add 基本用法:git add < path > 通过gith add < path >可以把path对应的文件添加到index(暂存区)区域 git commit 基本用法:git commit -m “descripe” 把index

ZSF_smile的博客 314

形位公差标注的常见误区与优化策略

本文深入解析机械设计中形位公差标注的常见误区与优化策略,特别针对NX2406用户提供实用技巧。从标注冗余、基准选择到公差值设定等五大误区入手,结合工程图实例展示如何提升标注精度与效率,帮助工程师避免常见错误,优化设计流程,确保零件功能实现与制造可行性。

info6的博客 245

第四篇:关于python程序打包的问题-找不到fsspec

这个问题困扰了我将近两天的时间一直找不到什么好的办法,甚至打算放弃。主要原因是身边没有可以述说的人,也没有可以请教的人。正在想要放弃的时候找到了解决办法。 打包后运行程序是这样的, 大概意思是找不见fsspec这个依赖,刚接触python说实话对于这些第三方库理解不是很到位,我的理解就是:类似于java程序中的jar包,程序找不见了。可怎么让他找见了,刚开始以为我自己没有安装fsspec,在cmd中进行了安装,结果如下图所示 很明显,已经安装并且安装目录都有,跟着网上的一些解决办法,在打包的时候把这.

weixin_47861710的博客 5865

【Git】Git commit message的自我修养(规范化)

Git commit 的介绍 从git官网我们可以知道Git commit作用是记录对仓库的修改 在日常开发中,使用Git命令最多的应该就是Git commit ,然而书写规范的commit message能够提高开发人员的代码维护升级效率,在能快速方便排查问题。那么commit message的规范就十分重要了 Git commit message的规范 目前使用比较多的规范是Ang...

徐海东的博客 1496

单细胞分析避坑指南:SCTransform和Harmony参数设置详解

本文深入解析了单细胞分析中SCTransform标准化与Harmony批次校正的关键参数设置。针对10x Genomics等数据,详细探讨了如何通过调整`vars.to.regress`、`theta`等核心参数,在有效去除技术噪音的同时,避免过度校正以保留关键的生物学差异,从而提升分析结果的可靠性与可解释性。

weixin_29053073的博客 608

git 修改之前的某次commit 注释和常见问题和解决方法

git 常见问题和解决方法 git merge 与 git rebase的区别 1.基于远程分支"origin",创建一个叫"mywork"的分支 git merge 在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit): git rebase 在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):

韦大人orz 1万+

SpotBugs使用

spotbugs命令行参数解析

javajingling的专栏 2947

无人机飞控技术最详细解读

已剪辑自: https://zhuanlan.zhihu.com/p/64519280[导读]被称作是“飞行器的大脑”的飞控到底是什么?以前,搞无人机的十个人有八个是航空、气动、机械出身,更多考虑的是如何让飞机稳定飞起来、飞得更快、飞得更高。如今,随着芯片、人工智能、大数据技术的发展,无人机开始了智能化、终端化、集群化的趋势,大批自动化、机械电子、信息工程、微电子的专业人材投入到了无人机研发大潮中,几年的时间让无人机从远离人们视野的军事应用飞入了寻常百姓家、让门外汉可以短暂的学习也能稳定可靠的飞行娱乐。不可

qq_41854911的博客 1万+

git的使用

2014/08/19 浪湾 git是最近几年程序员必须掌握的一套源代码管理工具,从最早的cvs到svn都没有git用起来更优雅。尤其是github.com的出现,让git更普及了。但git的命令体系的确入手有点难,我们今天就讲讲如何练习git的问题。 本文章不需要开任何账户,也不需要开任何线上测试项目,就可以模拟多分支进行练习。 提示:如果你想看懂下面的代码,你只需要记住每行前面

LK1105010206的博客 529

分数间隔均衡器的基本原理及应用(使用Matlab)

通过对接收信号进行加权求和,分数间隔均衡器可以抵消信号在传输过程中受到的频率响应失真。Matlab提供了丰富的工具和函数,可以方便地实现分数间隔均衡器,并进行性能评估。分数间隔均衡器(Fractional Interval Equalizer)是一种数字信号处理技术,用于均衡带通信道中的信号失真。分数间隔均衡器的基本原理是通过对接收信号进行加权求和,以抵消信号在传输过程中受到的频率响应失真。分数间隔均衡器在通信系统中具有广泛的应用。最后,我们通过比较均衡后的信号和发送数据的阈值来进行解调,并计算误码率。

2301_79325657的博客 680

Git —— Commit Message 规范介绍

日常开发中,我们经常会使用到 Git 进行代码管理,而 Git 中最常用的命令就是git commit,我们通过 commit 命令将修改后的代码提交到本地仓库,然后再通过git push命令将本地仓库的代码推送到远程仓库。git 规定提交时必须要写提交信息,作为改动说明,保存在 commit 历史中,方便回溯。规范的 log 不仅有助于他人 review, 还可以有效的输出 CHANGELOG,甚至对于项目的研发质量都有很大的提升,尤其是一些长期持续迭代维护,且多版本长期并存的项目。

Ccccxc的博客 4935

零基础学GPU KMD--8. 内存管理:GPU 显存与系统内存的协同​8.1 显存分配策略:GEM / TTM 原理

支持 VRAM、GTT(Graphics Translation Table)、SYSTEM 内存的动态迁移与缓存管理。:若缓冲区在 SYSTEM,TTM 分配 GTT 条目并建立页表映射,使 GPU 可直接访问。:系统内存中预留给 GPU 直接访问的区域,通过 GPU 的 MMU 做地址翻译。你需要我继续展开这一部分吗?​ 为复杂离散 GPU 设计,应对大容量 VRAM、多内存域、显存迁移等问题。:重量级、功能全,适合大容量、多内存域的离散 GPU,强调显存迁移与统一管理。

amy_mhd的博客 185

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

(Git)pre-commit提交规范及commit-message校验

一、使用husky实现 pre-commit 提交规范 安装 lint-staged 和 husky npm i lint-staged husky -D 在项目中初始化 .husky,会在 packgae.json 中添加 prepare 脚本 npm set-script prepare "husky install" && npm run prepare package.json { "scripts": { "prepare": "husky install"

4548

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Git Commit Message 规范

大咖好呀,我是恋喵大鲤鱼。Git 是一个免费开源的分布式版本控制系统,由 Linux 之父 Linus Torvalds 于 2005 年开发,最初的目的用于管理 Linux 内核的开发。因其高效的性能、便捷的分支管理、免费开源等优秀特性,一经推出,很快在全球范围内得到广泛使用,成为最流行的版本控制系统,没有之一。当我们使用 Git 对代码进行版本管理时,经常需要将变更推送至远端。每次提交变更时,我们需要书写 Commit Message 描述此次变更的内容。

Doublelv 的博客专栏。 2840

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Git commit message规范

Git是现在市面上最流行的版本控制工具,书写良好的commit message能大大提高代码维护的效率。但是在日常开发中由于缺少对于commit message的约束,导致填写内容随意、...

Docker的专栏 608

Folia 装进手机主屏:PWA 全屏歌词动画开听

Folia 是主打歌词动画的沉浸式音乐播放器,把 Folia PWA 装到手机上之后,主屏就会多一个图标。点它直接铺开满屏歌词动画,没有地址栏,没有标签页。网页版同时接网易云、QQ 音乐、酷狗、Navidrome 和桌面本地曲库,部署一次,电脑手机都能听。 ## 安装前置:先备齐三件事 - ⚠️ 地址必须是 HTTPS。PWA 安装和离线运行都依赖浏览器安全上下文,域名没证书的话,手机上可能连

gitblog_00131的博客 944

git commit 约定式提交

引言 在开发中免不了和他人一起团队协作提交代码,为了防止大家每次提交代码时,git commit -m ' '的提交信息不明所以,所以Angular 团队提出了Git 约定式提交。这只是一种约定规范,并不是强制要求,具体可参考这篇文章。 git commit message 的约定格式 <type>(<scope>): <subject> type: 必选,本次提交的代码类型。 scope: 可选,表示本次提交修改的文件范围。 subjec...

小白目的博客 2153

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

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

qq_52272700的博客 990

Git Commit Message 规范:让提交记录清晰明了

本文介绍了 Commit 规范的必要性和约定式提交(Conventional Commits)的核心结构。规范提交信息可以统一团队风格、高效追溯修改、支持自动化工具。核心格式包括类型、范围、描述等部分,并详细列举了feat、fix、perf等常见提交类型及其示例。文章还提供了描述写作技巧、范围选择建议和常见禁忌,如避免模糊表述、省略类型等。遵循这些规范可以使提交信息更清晰、有价值。

vortex5的博客 1681

git commit规范提交

Git每次提交代码时,都要写Commit Message(提交说明),通常情况下,Commit Message应该清晰明了,说明本次提交的目的和具体操作等。例如,有些人会写此次代码的修改是基于哪个模块,有些人会写解决了哪些Bug,有些则只写修改了哪个文件,中英文混用等等五花八门的Commit格式,这导致后续的代码维护成本很高,有时候提交人看Commit Message都不知道自己改了什么。比如查阅某个业务的修改历史,查阅某个时间段修复了哪些Bug,因为Commit没有统一的格式,就比较难快速获取这些信息。

酒无忧的博客 2131

【规范】Git Commit 约定式提交规范

约定式提交规范它是一种基于提交信息的轻量级约定,提供了一组简单规则来创建清晰的提交历史。

杜小舟的博客 1571

链接规范必须在全局范围内_Git commit message 规范

git是现在市面上最流行的版本控制工具,书写良好的commit message能大大提高代码维护的效率。但是在日常开发中由于缺少对于commit message的约束,导致填写内容随意、质量参差不齐,可读性低亦难以维护。在项目中引入commit message规范已是迫在眉睫。用什么规范?现在市面上比较流行的方案是约定式提交规范(Conventional Commits),它受到了Angular提...

weixin_39682897的博客 168
上一篇: Koa源码笔记
下一篇: 答:一道价值25k的蚂蚁金服异步串行面试题
胡斐小鱼
博客等级 码龄13年 88粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值