主页
文章
分类
标签
关于
Git的commit通用提交规范
Git入门
发布于: 2024-10-21   更新于: 2024-10-21   收录于: Git
文章字数: 2229   阅读时间: 5 分钟   阅读量:

目的:让项目提交更清晰有序

在软件项目开发的过程中,项目的版本管理至关重要。而 Git 作为目前最为流行的分布式版本控制系统,其 commit 操作是记录项目变更的核心。为了让项目的成员以及学习者能更好地了解每一次项目提交和更新的内容,规范 Git Commit 就显得尤为重要。

想象一下,当你接手一个已经进行了一段时间开发的项目,面对密密麻麻的提交记录,如果没有规范的 commit 信息,你将很难快速理解每一次提交的目的和影响。规范的 Git Commit 信息就像是项目开发过程中的 “导航图”,它能够清晰地展示项目的演进路径,帮助团队成员快速定位问题、回溯历史、协同开发。对于开源项目,良好的 commit 规范也能让新贡献者更容易融入项目,理解项目的发展脉络。

Git Commit 的总体结构

根据网上的大部分资料,一个Git Commit的通用规范为如下格式:

1
2
3
4
5
<type>(<scope(可选)>): <subject>
<BLANK LINE>
<body(可选)>
<BLANK LINE>
<footer(可选)>

Header(头部)<type>(<scope>): <subject> 代表了整个提交的简短摘要,它就像是书籍的标题,用最简洁的语言告诉别人这部分内容的核心。

Body(主体):对本次提交的详细描述,可以包含更多的细节、动机、影响等信息。这部分内容如同书籍的章节内容,详细阐述具体的实现细节和相关背景。

Footer(尾部):可用于记录一些额外的信息,比如关联的 Issue 编号等。它类似于书籍的附录,补充一些与正文相关但又相对独立的信息。

具体规范详解

Header 格式

Header 有三部分组成,其中<type>是最重要的部分,是每一次提交不不可或缺的部分。

  • type类型:用于说明 commit 的类别,常见类型如下:
类型 说明 示例
feat 新功能(feature) 在电商系统中添加商品推荐功能,commit 类型为 feat
fix 修复 bug 用户登录页面输入特殊字符时报错,修复后的 commit 类型为 fix
docs 文档(documentation) 更新项目的 README 文件或添加新的技术文档,提交属于 docs 类型
style 格式(不影响代码运行的变动,如空格、缩进等) 将代码缩进从空格改为制表符,提交标记为 style
refactor 重构(既不是新增功能,也不是修复 bug 的代码变动) 优化复杂算法模块的代码结构,提高可读性和可维护性,commit 类型为 refactor
test 增加测试 为项目中的某个功能模块添加新的测试用例,提交为 test 类型
chore 构建过程或辅助工具的变动 更新项目的构建脚本,或升级开发工具版本,相关 commit 类型为 chore
perf 通过更改代码来实现性能优化 在某项目中,原先的算法时间复杂度较大,换一个算法来提高效率,此次commit为pref类型
build 打包,构建系统 为一个Web项目生成生产环境的打包文件,将代码进行压缩合并,生成静态资源文件,此次commit为build类型
revert 恢复到上一次提交 发现某次功能更新后,系统出现严重故障,要回滚系统,此次commit为revert类型
  • scope范围:表示commit的作用范围,如数据层、视图层,也可以是目录名称,如果说一次提交必须包含较多范围的话,可以不写或者用*。

  • subject主题:简要描述本次提交的主要内容,以动词开头,使用祈使句。例如 “Add new user registration feature”(添加新的用户注册功能)、“Fix login bug”(修复登录漏洞)等。这样的表述清晰明了,让人一眼就能知道本次提交的主要操作。

Body 内容

详细描述:对本次提交的具体内容进行详细说明。如果是实现新功能,需要说明功能的具体逻辑、使用方法等。例如,在实现用户注册功能时,要说明注册流程是通过邮箱验证还是手机验证码验证,用户信息存储在哪个数据库表中,以及相关的前端交互逻辑等。如果是修复 bug,需要说明 bug 出现的场景、原因以及修复的方法。比如,描述用户在点击 “提交订单” 按钮后,页面出现空白的情况,经过排查发现是由于某个 JavaScript 函数中变量未定义导致的,通过正确定义变量并进行初始化,解决了该问题。

动机和影响:解释为什么要进行这次提交,以及这次提交可能会对项目产生哪些影响。例如,添加商品推荐功能是为了提高用户购买转化率,该功能的实现可能会增加数据库的查询负载,需要对服务器资源进行相应的评估和调整。

关联 Issue:如果本次提交是为了解决某个 Issue,可以在这里注明 Issue 的编号,如 “Closes #123”,表示关闭编号为 123 的 Issue。这有助于在项目管理工具中建立提交与问题之间的关联,方便追踪和管理项目进度。

其他信息:还可以记录一些其他需要说明的事项,比如与本次提交相关的讨论链接、参考资料等。例如,如果在实现某个功能时参考了一篇技术博客,就可以将博客链接记录在 footer 中,方便后续查阅。

实际操作示例

假设我们正在开发一个简单的 Web 应用,现在要添加一个用户登录功能。以下是一个符合规范的 Git Commit 示例:

1
git commit

进入默认编辑界面:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
feat: add user login feature

This commit adds a user login feature to the web application. The login process uses email and password for authentication.

Details:

1\. Created a new login route in the backend server.

2\. Developed a corresponding front - end form for users to input their credentials.

3\. Implemented a password hashing mechanism to ensure user data security.

The motivation for this feature is to provide a secure way for users to access their personalized content. This change may require additional database queries for user authentication, so some performance optimizations may be needed in the future.

Closes #56

在实际操作中,当你使用 Git 进行提交时,我们有时候并不需要那么规范,只要记录些许内容,那我们就只需要用Header部分即可,例如:

1
git commit -m "feat(web): add task category filtering function"
1
git commit -m "fix(backend): correct database update statement for task description modification"

总结

遵循 Git Commit 规范可以使项目的提交历史更加清晰、易于理解,方便团队成员之间的协作和沟通,也有利于项目的维护和管理。虽然在一开始遵循规范可能会花费一些额外的时间,但从长远来看,它将大大提高项目开发的效率和质量。