如何编写一个优雅的commit message

在Git中,git commit 命令扮演着至关重要的角色。它的主要作用是将暂存区(staging area)里的改动内容提交到本地仓库(repository)中,形成一个新的版本或提交(commit)。这个过程是 Git 工作流程中的一个关键步骤,它允许开发者将他们的更改以逻辑上独立的单元进行保存,这些单元随后可以被追踪、共享、回滚或合并。

具体来说,git commit 命令的作用包括:

1)保存更改:当你对文件进行修改后,这些修改首先被 Git 跟踪为工作目录中的更改。通过 git add 命令,你可以将这些更改添加到暂存区(或称为索引区)。然后,git commit 命令将这些暂存的更改保存为一个新的提交(commit),这个提交包含了更改的元数据(如作者、提交者、日期、提交信息等)和更改的内容。

2)创建历史记录:每次提交都会创建一个新的版本,Git 会跟踪这些版本之间的变化,形成一个项目历史记录。这个历史记录允许你查看项目的演变过程,理解每个更改的上下文,以及回滚到以前的版本。

3)便于协作:在多人协作的项目中,git commit 使得每个开发者的更改都可以被清晰地记录和追踪。这有助于解决合并冲突、审查代码更改以及确保项目的稳定性和一致性。

4)促进版本控制:通过提交,Git 允许你管理项目的不同版本。你可以轻松地切换到项目的任何历史版本,比较不同版本之间的差异,以及基于旧版本创建新的分支。

请在此添加图片描述

使用 git commit 命令时,通常会附带一条提交信息(commit message),这条信息应该简洁明了地描述所做的更改。良好的提交信息实践有助于维护清晰的项目历史记录,并促进团队成员之间的有效沟通。

例如,提交一个更改的基本命令可能如下所示:

git add .  # 将所有更改添加到暂存区
git commit -m "添加新功能:用户注册页面"  # 提交更改并附上提交信息

在这个例子中,git add . 命令将所有更改添加到暂存区,而 git commit -m "添加新功能:用户注册页面" 命令则将这些更改提交到本地仓库,并附上了描述性的提交信息。

这篇文章我们先抛开Git这项技术不谈,单纯的了解下如何编写一个优雅的Commit Message

如何编写优雅的Commit Message

编写优雅的commit message是良好版本控制实践的一部分,它可以帮助团队成员更好地理解每次提交的目的和上下文。以下是一些编写优雅commit message的准则:

1)保持简短: 尽量让commit message的第一行简短且能够描述这次提交的核心内容。这通常被用作日志和版本历史中的标题。

2)使用清晰、具体的描述: 在简短标题之后,可以添加一个空行,然后添加更详细的描述。这个描述应该清晰地解释为什么需要这次提交,以及它是如何解决问题的。

3)使用动词开始: 尽量使用过去时态的动词来开始你的commit message,如“Add”, “Fix”, “Refactor”等,这有助于清晰地表达这次提交的动作。

4)引用相关的问题或任务: 如果你的提交与某个问题或任务相关,可以在commit message中引用该问题的编号或链接。这有助于跟踪和关联工作。

5)避免冗长和无关紧要的细节: 保持commit message的焦点在核心改动上,避免包含冗长的讨论或无关紧要的细节。

我们可以举个例子:

示例1

Add user authentication feature

This commit adds a basic user authentication system to the application.
It includes a login form, a registration form, and a simple authentication
mechanism that checks user credentials against a database.

Fixes #123

这个commit message首先用简短的一行描述了主要改动(添加用户认证功能),然后通过详细描述进一步解释了改动的内容和目的,并最后通过Fixes #123关联到了一个具体的问题或任务。

优雅的commit message应该包含足够的信息,以便其他开发者(包括未来的你)能够迅速理解改动的内容、目的以及可能的影响。具体来说,一个优雅的commit message通常包含以下几个部分:

标题(Header)

  • 简短描述:通常是一行,最多不超过50个字符(但这不是硬性规定,主要目的是保持简短)。
  • 使用动词:以过去时态的动词开始,如“Add”, “Fix”, “Improve”, “Refactor”, “Remove”, “Update”等,清晰地表明这次提交的动作。
  • 内容概述:简要概述这次提交的主要内容或目的。

正文(Body) (可选):

  • 详细解释:如果改动较为复杂或需要更详细的背景说明,可以在标题下方添加一个空行,然后编写正文部分。
  • 原因:解释为什么进行这次改动,包括解决的具体问题、实现的功能或优化的点。
  • 影响:描述改动可能带来的影响,包括对其他部分代码的依赖关系、需要特别注意的地方等。

尾注(Footer) (可选):

  • 关联问题:如果这次提交与某个问题或任务相关联,可以在尾注中引用该问题的编号或链接,例如“Closes #123”或“Fixes #456”。
  • 破坏性变更:如果这次提交包含破坏性变更(Breaking Changes),应在此部分明确说明,以便其他开发者了解并做出相应调整。
  • 其他元数据:根据需要,可以在尾注中添加其他元数据,如审核者、测试情况等。
参考开源项目的commit message

开源项目的commit message非常值得参考。开源项目通常由一群贡献者共同维护,他们遵循一定的编码标准和最佳实践,以确保项目的质量和可维护性。这些标准通常也包括编写清晰、有描述性的commit message

1)Go:https://github.com/golang/go/commits/master/

请在此添加图片描述

首先我们看出go在GitHub开源仓库的commit message是非常有规律的,提交信息的标题都是以[修改包]:[变更内容]为主,我们选择一个commit进行查看:

https://github.com/golang/go/commit/d288776d9143370567fa56b44fa875d0e8fb02b6

cmd/compile: remove trivial closure reference

Trivial closures will be converted to global functions, thus they are
not closures anymore. Using fn.IsClosure function is enough, allow
removing the trivial/non-trivial closures in the code.

Change-Id: Iceb186dd92c1732b101e221ebc13406db35c69ea
Reviewed-on: https://go-review.googlesource.com/c/go/+/611995
......

也可以看出这个commit是非常详细的。

2)Grafana:https://github.com/grafana/grafana/commits/main/

Grafana的commit message虽然和go的内容组成不太一样,但是也保持着一定的规律。

请在此添加图片描述

我们随机查看一个具体的commit message:

https://github.com/grafana/grafana/commit/1c52d7b994b54e137d83343305a3cdf691d169b0

Docs: Update forward direction search for Loki entry (#92875)

只有标题部分,也是符合commit message原则的。

小总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/887031.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HarmonyOS】时间处理Dayjs

背景 在项目中经常会使用要时间的格式转换,比如数据库返回一个Date数据,你需要转成2024-10-2的格式,鸿蒙的原生SDK中是没有办法实现的,因此,在这里介绍第三方封装好并且成熟使用的库Dayjs。 安装 切换到Entry文件夹下…

【学习资源】人在环路的机器学习

说明:本文图片和内容来源 Human-in-the-Loop Machine Learning Human-in-the-Loop Machine Learning Active learning and annotation for human-centered AI by Robert (Munro) Monarch, June 2021 介绍Human-in-the-Loop的目标,学习过程&#xff0c…

gdb 调试 linux 应用程序的技巧介绍

使用 gdb 来调试 Linux 应用程序时,可以显著提高开发和调试的效率。gdb(GNU 调试器)是一款功能强大的调试工具,适用于调试各类 C、C 程序。它允许我们在运行程序时检查其状态,设置断点,跟踪变量值的变化&am…

基于Arduino的宠物食物分配器

创作本文的初衷是本人的一个养宠物的梦想(因为家里人对宠物过敏,因此养宠物的action一直没有落实),但是梦想总是要有的哈哈哈哈哈。上周正好是和一个很好的朋友见面,聊到了养宠物的事情,她大概是讲到了喂宠…

震撼!工业史上第一家万级别规模的工业数字化设备效果图平台

耗时八年打造,国内第一家万级别规模的工业数字化设备效果图平台 平台:www.kingview3d.cn 创作者:kingview3d郭工 行业:煤矿综合自动化、污水处理、净水处理、楼宇暖通、环保工程、医药废水处理、二供、无负压加压站、提升泵站、一…

《NoSQL》非关系型数据库MongoDB 学习笔记!

Mongo基础: 使用数据库: 使用use 命令 后面跟着要使用的数据库名字即可, 例如:use cities, 值得注意的是, mongo中不像mysql, 还需要先创建数据库,后访问, mongo中,你无…

【WebGis开发 - Cesium】如何确保Cesium场景加载完毕

目录 引言一、监听场景加载进度1. 基础代码2. 加工代码 二、进一步封装代码1. 已知存在的弊端2. 封装hooks函数 三、使用hooks方法1. 先看下效果2. 如何使用该hooks方法 三、总结 引言 本篇为Cesium开发的一些小技巧。 判断Cesium场景是否加载完毕这件事是非常有意义的。 加载…

在 Elasticsearch Serverless 上使用 Eland

作者:来自 Elastic Quentin Pradet 本博客将向你展示如何使用 Eland 将机器学习模型导入 Elasticsearch Serverless,然后如何使用类似 Pandas 的 API 探索 Elasticsearch。 Elasticsearch Serverless 中的 NLP 自 Elasticsearch 8.0 起,可以…

SQL专项练习第二天

在数据处理和分析中,Hive 是一个强大的工具。本文将通过五个 Hive 相关的问题展示其在不同场景下的应用技巧。 先在home文件夹下建一个hivedata文件夹,把我们所需的数据写成txt文件导入到/home/hivedata/文件夹下面。 一、找出连续活跃 3 天及以上的用户…

【AI论文精读1】针对知识密集型NLP任务的检索增强生成(RAG原始论文)

目录 一、简介一句话简介作者、引用数、时间论文地址开源代码地址 二、摘要三、引言四、整体架构(用一个例子来阐明)场景例子:核心点: 五、方法 (架构各部分详解)5.1 模型1. RAG-Sequence Model2. RAG-Toke…

Python+Matplotlib创建y=sinx、y=cosx、y=sinx+cosx可视化

y sin x (奇函数): 图像关于原点对称。 对于任何 x,sin(-x) -sin(x),符合奇函数定义。 y cos x (偶函数): 图像关于 y 轴对称。 对于任何 x,cos(-x) cos(x),符合偶函数定义。 y sin x cos x (既…

安全帽头盔检测数据集 3类 12000张 安全帽数据集 voc yolo

安全帽头盔检测数据集 3类 12000张 安全帽数据集 voc yolo 安全帽头盔检测数据集介绍 数据集名称 安全帽头盔检测数据集 (Safety Helmet and Person Detection Dataset) 数据集概述 该数据集专为训练和评估基于YOLO系列目标检测模型(包括YOLOv5、YOLOv6、YOLOv7…

LabVIEW机床加工监控系统

随着制造业的快速发展,机床加工的效率与稳定性成为企业核心竞争力的关键。传统的机床监控方式存在效率低、无法远程监控的问题。为了解决这些问题,开发了一种基于LabVIEW的机床加工监控系统,通过实时监控机床状态,改进生产流程&am…

Spring MVC__入门

目录 一、SpringMVC简介1、什么是MVC2、什么是SpringMVC 二、Spring MVC实现原理2.1核心组件2.2工作流程 三、helloworld1、开发环境2、创建maven工程3、配置web.xml4、创建请求控制器5、创建springMVC的配置文件6、测试HelloWorld7、总结 一、SpringMVC简介 1、什么是MVC MV…

html5 + css3(上)

目录 HTML初识基础认知web标准vscode的简介和使用注释 HTML标签学习排版标签标题和段落换行和水平线标签 文本格式化标签媒体标签图片标签图片-基本使用图片-属性 路径绝对路径相对路径 音频标签视频标签链接标签 HTML基础列表标签列表-无序和有序列表-自定义 表格标签表格-使用…

【JAVA开源】基于Vue和SpringBoot的周边产品销售网站

本文项目编号 T 061 ,文末自助获取源码 \color{red}{T061,文末自助获取源码} T061,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Java网络通信—UDP

0.小记 1.udp通信不需要建立socket管道,一边只管发,一边只管收 2.客户端:将数据(byte)打包成包裹(DatagramPacket),写上地址(IP端口),通过快递站&…

【HTML并不简单】笔记1-常用rel总结:nofollow、noopener、opener、noreferrer,relList

文章目录 rel"nofollow"rel"noopener"与rel"opener"rel"noreferrer"relList对象 《HTML并不简单:Web前端开发精进秘籍》张鑫旭,一些摘要: HTML,这门语言的知识体系非常庞杂,涉…

Nagle 算法:优化 TCP 网络中小数据包的传输

1. 前言 在网络通信中,TCP(传输控制协议)是最常用的协议之一,广泛应用于各种网络应用,如网页浏览、文件传输和在线游戏等。然而,随着互联网的普及,小数据包的频繁传输成为一个不容忽视的问题。…

php email功能实现:详细步骤与配置技巧?

php email发送功能详细教程?如何使用php email服务? 无论是用户注册、密码重置,还是订单确认,电子邮件都是与用户沟通的重要手段。AokSend将详细介绍如何实现php email功能,并提供一些配置技巧,帮助你更好…