Git使用——commit规范

一、制定目的

  1. 统一团队Git commit日志标准,便于代码review,版本发布以及日志自动化生成等。
  2. 统一团队的Git工作流,包括分支使用、tag规范、issue等

二、Git工作流

  1. 分支规范
分支类型命名规范创建自合并到说明
mastermaster长期分支,部署到生产环境中的代码
developdevelopmaster长期分支,进行代码集成的分支
featurefeature/*developdevelop短期分支,新功能分支
releaserelease/*developdevelop和master短期分支,一次新版本的发布
hotfixhotfix/*masterdevelop 和 master短期分支,生产环境中发现的紧急 bug 的修复,唯一可以直接从master分支fork出来的分支
  • 三个短期分支类型一旦完成开发,它们就会被合并进develop或master,然后被删除。

  • 分支的名称应该遵循一定的命名规范,以方便开发人员识别。

  • 当需要开发一个新的功能时,基本的流程如下:

从 develop 分支创建一个新的 feature 分支,如 feature/my-xxx。
在该 feature 分支上进行开发,提交代码。
当代码提交完成之后,push feature分支到远端仓库。
在gitlab上创建合并请求

三、Commit规范

  1. 概述

一个commit 应该包括一个准确的逻辑改动。一个逻辑改动包括增加新的特性或修改特定的Bug,如果不能在较高层次用简短语句描述这个改动,就说明它对于单个commit 来说太复杂了,应该拆分它!把你的代码改动拆分为多个 commit。

  • 以下习惯,有则改之,无则加冕:

总是在每天下班前commit今天所有的改动,这种commit不会清晰。
懒汉式的commit信息,如“修改了几个Bug”,这种信息毫无意义。
两个改动放在一次 commit 中。如“修改用户注册不成功的处理和用户登录的验证”,请把它拆开分别 commit。
有些动词用现在时,而不是完成时,例如不要说“改好了(fixed)…,解决了(solved)…, 增加了(added)…,修改了(revised)…”,而应该说“增加(add)…,修改(revise)…,解决(solve)…”
在git commit 上增加 -m 或 --message= 参数进行提交,提倡使用git commit或可视化的提交

  1. Git commit日志基本格式
<type>(<scope>):<@taskid> <subject>
<BLANK LINE>
<body>
  1. 格式说明

type代表某次提交的类型,比如是修复一个bug或增加一个新的feature。type类型如下:

  • feat: 新增feature
  • fix: 修复bug
  • docs: 仅仅修改了文档,比如README, CHANGELOG, CONTRIBUTE等等
  • style: 仅仅修改了空格、格式缩进、都好等等,不改变代码逻辑
  • refactor: 代码重构,没有加新功能或者修复bug
  • perf: 优化相关,比如提升性能、体验
  • test: 测试用例,包括单元测试、集成测试等
  • chore: 改变构建流程、或者增加依赖库、工具等
  • revert: 回滚到上一个版本
  1. 格式要求
  • 标题行:50个字符以内,描述主要变更内容
  • 主体内容:更详细的说明文本,建议72个字符以内。 需要描述的信息包括:
  • 为什么这个变更是必须的?

它可能是用来修复一个bug,增加一个feature,提升性能、可靠性、稳定性等等
他如何解决这个问题? 具体描述解决问题的步骤
是否存在副作用、风险?
修复BUG时,关联BUG编号

  • 示例:
feat(用户): @TaskID,新增登录注册功能

 # 新增系统登录登录功能,可使用邮箱、密码进行用户注册;
 # 邮箱发送验证码,验证通过后,即可登录。
### Git Commit Message 规范示例 #### 单行提交信息格式 每次提交应当只解决一个问题,这有助于简化代码审查过程并提高可追溯性。单行提交信息应该简洁明了,通常不超过72个字符[^1]。 ```plaintext type(scope): subject ``` - `type` 表示更改的性质(如 feat, fix) - `scope` 是可选字段,用于指定受影响的部分或模块名称 - `subject` 描述所做的改动摘要 #### 完整多行提交信息结构 对于更复杂的变更,则推荐采用如下完整的多行格式: ```plaintext type(scope): subject Body explaining the change and its motivation. Footer with any relevant issue references. ``` 其中: - **Header**: 包含三部分——类型(type),作用域(scope)以及主题(subject) - **Body**: 对修改原因及实现细节做进一步解释说明;如果适用的话还可以提及如何测试这些变化。 - **Footer**: 如果有的话,在这里注明关联的问题编号或者其他元数据信息,例如关闭某个GitHub Issues。 #### 实际案例展示 ##### 添加新功能的例子 当向项目中引入新的特性时,可以这样书写commit message: ```plaintext feat(user-profile): add avatar upload feature Allow users to upload avatars from their local machines or via URL links. This enhancement improves user experience by personalizing profiles. Closes #1234 ``` ##### 修复Bug的例子 针对错误修正类别的提交消息则像下面这样表达: ```plaintext fix(authentication): resolve login redirect loop on Safari browser The previous implementation caused an infinite redirection when logging in using Safari due to incorrect handling of session cookies. The solution was implemented according to best practices outlined at MDN Web Docs regarding secure cookie settings. Fixes #9876 ``` #### 工具支持 为了确保团队成员都能遵循一致的消息格式化规则,建议使用工具辅助验证。例如可以通过配置 pre-commit hook 来运行 validate-commit-msg 或者集成 CI/CD 流程中的检查脚本以自动拒绝不符合规定的提交请求[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joseph365

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值