如何编写一个优雅的commit message

news2024/10/5 14:03:27

在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.coloradmin.cn/o/2189974.html

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

相关文章

渗透测试入门学习——使用python脚本自动识别图片验证码,OCR技术初体验

写在前面 由于验证码在服务端生成后存储在服务器的session中,而标用于标识用户身份的sessionid存在于用户cookie中 所以本次识别验证码时需要用requests.session()创建会话对象,模拟真实的浏览器行为,保持与服务器的会话才能获取登录时服务…

wsl2 ubuntu 桥接以太网卡

注意:此方法需要至少 Windows 11 22H2。桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。 在桥接的作用下,类似于把宿主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,宿主机也同样插在这…

通信工程学习:什么是RARP反向地址解析协议

RARP:反向地址解析协议 RARP(Reverse Address Resolution Protocol,反向地址解析协议)是一种网络协议,其主要作用是在设备只知道物理地址(如MAC地址)时,允许其从网关服务器的地址解析…

致亲爱的Android studio

你的未来发展趋势: 可不可以把兼容性,什么的搞得更好。起因是我想写期末大作业,然后简单的把功能写的差不多了之后,我就想到处看看有没有一套比较好的类似于组件库的东西,但是没找到,然后就把目标锁定到了G…

Vue入门-Node.js安装

进入Node.js中文网 ​​​​​​​点击进入Node.js中文网 或者手动输入网址: https://www.nodejs.com.cn/download.html 点击下载64位安装包: 下载好之后双击进行安装 可选择个性化安装或默认安装 直接点【Next】按钮,此处可根据个人需求…

深度解析 HTTP

我的主页:2的n次方_ 1. HTTP 的简单介绍 HTTP :超文本传输协议,不仅能传输文本,还能传输图片,音频文件,视频 目前基本上都用的是 1.1 版本 https 可以认为是 http 的升级版,区别就是引入了…

【pytorch】张量求导4

再再接上文,看到作者有一个关于向量乘矩阵的描述。 经过搜索发现,现在的pytorch已经修复了这一问题,提供了mv()和matmul()两种方式实现矩阵和一维向量的乘积,可以参看这篇文章。 经过查阅pytorch的文件,找到了cuda侧…

如何利用 Kubernetes 取得成功

Kubernetes是一个开源编排平台,用于自动部署和管理容器化工作负载和服务,目前越来越受欢迎。 该平台由全球贡献者社区维护,其潜在优势包括提高资源效率、提高可扩展性和高可用性。 在过去几年中,Kubernetes 和相关的云原生技术已…

[Qt] 基于 Qt 的文件选择与图片显示功能实现

文章目录 基础版本:open1()功能解析:特点与限制: 增加路径记忆功能:open2()功能解析:特点与改进: 使用智能指针优化内存管理:open3()功能解析:特点与改进: 图片自适应窗口…

线程互斥函数的例子

代码 #include<stdio.h> #include<pthread.h> #include<sched.h> void *producter_f(void *arg); void *consumer_f(void *arg); int buffer_has_item0; pthread_mutex_t mutex; int running1; int main(void) {pthread_t consumer_t;pthread_t producter_t…

PCL 点云体素滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 体素滤波实现 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xf…

Session会话管理技术

Session会话管理技术 会话: 两个交互,在开发中是指浏览器和服务器它们两个的交互 会话管理: 管理会话中产生的数据,一般是记录登录状态 补充: 状态管理,就是管理数据 1、 Session概述 Session用于记录用户的状态。Session指的是在一段时间内&#xff0c;单个客户端与Web服务…

【C++】—— 类和对象(中)

【C】—— 类和对象(中) 文章目录 【C】—— 类和对象(中)前言1. 类的默认成员函数2. 构造函数3. 析构函数4. 拷贝构造函数5. 赋值运算符重载5.1 运算符重载5.2 赋值运算符重载 结语 前言 小伙伴们大家好呀&#xff0c;昨天的 【C】——类和对象(上) 大家理解的怎么样了 今天…

【AI人工智能】文心智能体,双人冒险游戏智能体创作分享

背景 最近半年&#xff0c;“AI agent”&#xff08;智能体&#xff09;这一词汇变得非常热门。许多人以为创建自己的智能体会很复杂&#xff0c;实际上&#xff0c;现有的平台已经大大降低了操作门槛。只要有创意&#xff0c;几乎每个人都可以轻松创建属于自己的智能体。今天…

WordPress响应式Git主题响应式CMS主题模板

兼容 IE9、谷歌 Chrome 、火狐 Firefox 等主流浏览器 扁平化的设计加响应式布局&#xff0c;兼容电脑、和各个尺寸手机的完美响应 主题设置面板新增多种AD位&#xff0c;PC端和移动设备各不相同 在主题设置选项中就可以进行基本的SEO设置&#xff1a;首页、分类、文章等页面…

跟我学C++中级篇——函数调用的本质

一、进程的执行过程 正常的情况下&#xff0c;程序会被计算机从硬盘加载到内存中&#xff0c;然后跳转到主入口函数进行执行。依次按照逻辑对相关的模块进行加载调用。其中&#xff0c;最常用的就是调用一个函数&#xff0c;可以说&#xff0c;函数是C/C程序中的一个重要的基础…

Python——异常处理机制

Python 异常处理机制 Python异常与异常处理机制针对 Traceback 的解读try-except-else-finallyexcept语句except语句的机制在 except 语句中引用当前被处理的 Python 异常 finally语句finally语句执行后才能抛出未被处理的异常finally中执行return会导致异常丢失 raise 语句rai…

集合框架02:Collection使用(1)

视频链接&#xff1a;13.05 Collection使用&#xff08;1&#xff09;_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?p5&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 代码示例&#xff1a; package com.yundait.Demo01;import java.util.ArrayList; i…

hbuilderx+uniapp+Android健身房管理系统 微信小程序z488g

目录 项目介绍支持以下技术栈&#xff1a;具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是&#xff1a;数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 用户功能…

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

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