如何编写一个优雅的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 featureThis 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 referenceTrivial 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.mzph.cn/web/54393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Node2Vec的图嵌入实现过程

目录 一、引言二、Node2Vec(原理)2.1 随机游走(Random Walk)2.2 嵌入学习2.3 Node2Vec 的优势 三、使用 Node2Vec 进行图嵌入(实践)3.1 读取和转换 JSON 文件为 Graph 对象3.2 训练 Node2Vec 模型3.3 二维嵌…

10款好用的开源 HarmonyOS 工具库

大家好,我是 V 哥,今天给大家分享10款好用的 HarmonyOS的工具库,在开发鸿蒙应用时可以用下,好用的工具可以简化代码,让你写出优雅的应用来。废话不多说,马上开整。 1. efTool efTool是一个功能丰富且易用…

Kotlin:2.0.20 的新特性

一、概述 Kotlin 2.0.20英文版官方文档 Kotlin 2.0.20发布了!这个版本包括对Kotlin 2.0.0的性能改进和bug修复,我们在其中宣布Kotlin K2编译器为Stable。以下是本次发布的一些亮点: 数据类复制函数将具有与构造函数相同的可见性来自默认目标层次结构的源集的静态访…

Python批量下载PPT模块并实现自动解压

日常工作中,我们总是找不到合适的PPT模板而烦恼。即使有免费的网站可以下载,但是一个一个地去下载,然后再批量解压进行查看也非常的麻烦,有没有更好方法呢? 今天,我们利用Python来爬取一个网站上的PPT&…

HTML+CSS基础用法介绍五

目录: 结构伪类选择器盒子模型-边框线盒子模型-内边距盒子模型-解决盒子被撑大盒子模型-外边距与版心居中小知识:清除浏览器中所有标签的默认样式内容溢出控制显示方式盒子模型-圆角 🐎正片开始 结构伪类选择器 什么是结构伪类选择器&…

全新一区PID搜索算法+TCN-LSTM+注意力机制!PSA-TCN-LSTM-Attention多变量时间序列预测(Matlab)

全新一区PID搜索算法TCN-LSTM注意力机制!PSA-TCN-LSTM-Attention多变量时间序列预测(Matlab) 目录 全新一区PID搜索算法TCN-LSTM注意力机制!PSA-TCN-LSTM-Attention多变量时间序列预测(Matlab)效果一览基本…

66 使用注意力机制的seq2seq_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录动机加入注意力总结代码定义注意力解码器训练小结练习 我们来真的看一下实际应用中,key,value,query是什么东西,但是取决于应用场景不同,这三个东西会产生变化。先将放在seq2seq这个…

Linux dlsym符号查找疑惑分析

dlsym 函数是 Linux 下动态链接库(shared library)编程中的一个重要函数。它用于在运行时获取动态链接库中符号的地址,通常用于获取函数指针或变量的地址。 以下是 dlsym 函数的基本用法和示例。 1. 函数原型 void *dlsym(void *handle, c…

如何实现事件流操作

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了通道相关的内容,本章回中将介绍StreamProvider组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在Flutter中Stream是经常使用的组件,对该组件的监听可void main() {///让状态栏和程序的appBar融为一体…

海龟绘图画小汽车

1、效果图: 2、完整代码 import turtlet turtle.Turtle() #创建一个新的画布对象t.penup() t.goto(0,80) t.pendown()t.fillcolor("red") t.begin_fill() t.lt(180) t.fd(60) t.lt(45) t.fd(113) t.rt(45) t.fd(80) t.lt(90) t.fd(80) t.…

常见的VPS或者独立服务器的控制面板推荐

随着越来越多的企业和个人转向VPS和独立服务器以获得更高的性能和灵活性,选择合适的控制面板变得尤为重要。一个好的控制面板可以大大简化服务器管理,提高工作效率。本篇文章将介绍2024年最值得推荐的VPS控制面板,帮助您做出明智的选择。 1.…

论文阅读(十一):CBAM: Convolutional Block Attention Module

文章目录 IntroductionConvolutional Block Attention ModuleExperimentsConclusion 论文题目:CBAM: Convolutional Block Attention Module(CBAM:卷积注意力机制)   论文链接:点击跳转   代码链接:Git…

关于BSV区块链覆盖网络的常见问题解答(上篇)

​​发表时间:2024年9月20日 在BSV区块链上的覆盖网络服务为寻求可扩展、安全、高效交易处理解决方案的开发者和企业家开辟了新的视野。 作为开创性的曼达拉升级的一部分,覆盖网络服务提供了一个强大的框架,用于管理特定类型的交易和数据访问…

新编英语语法教程

新编英语语法教程 1. 新编英语语法教程 (第 6 版) 学生用书1.1. 目录1.2. 电子课件 References A New English Grammar Coursebook 新编英语语法教程 (第 6 版) 学生用书新编英语语法教程 (第 6 版) 教师用书 1. 新编英语语法教程 (第 6 版) 学生用书 https://erp.sflep.cn/…

3.点位管理改造-列表查询——帝可得管理系统

目录 前言一、与页面原型差距1.现在:2.目标:3. 存在问题: 二、修改1.重新设计SQL语句2.修改mapper层,使用Mybatis中的嵌套查询3.修改service层4. 修改controller层5.前端修改6.补充区域查看详情7.数据完整性 前言 提示&#xff1…

《OpenCV 计算机视觉》—— 视频背景建模

文章目录 一、背景建模的目的二、背景建模的方法三、背景建模的步骤四、注意事项五、代码实现 一、背景建模的目的 视频背景建模的主要目的是从视频序列中提取出静态背景,以便将动态的前景对象与静态的背景进行分离。这有助于进一步分析和处理视频内容,…

【Mybatis篇】Mybatis的关联映射详细代码带练 (多对多查询、Mybatis缓存机制)

🧸安清h:个人主页 🎥个人专栏:【计算机网络】,【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯一.关联映射概述 &#x1f6a…

RTSP协议讲解

1.RTSP协议 rtsp,英文全称 Real Time Streaming Protocol,RFC2326,实时流传输协议,是 TCP/IP 协议体系中的一个应用层协议。 RTSP 交互流程 1)OPTIONS C--->S 客户端向服务器端发现 OPTIONS,请求可用…

html中的文本标签(含标签的实现案例)

目录 1.标题标签 2.标题标签的align属性 3.段落标签 4.水平线标签hr 5.换行标签br 6.文本样式标签font ​编辑7.文本格式化标签 8.文本语义标签 1)时间time标签 2)文本高亮Mark标签 3)cite标签 9.特殊字符标签 10.图像标签img 附录&#xff…

基于微信小程序的旅游拼团系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…