怎么创建一个良好的Git提交信息
提交信息是对提交之前添加和更改的文件所做的更改的简短描述。
良好的提交信息不仅对你所参与的项目上其它的团队成员很重要,对你自己而言也很重要,你需要跟踪所有提交,并确切知道在提交期间发生的变动。
即使你开发的是个人项目,我也建议你开始养成编写良好的提交信息的习惯。
这是我惯用的格式(可以随着你的个人习惯和公司来改变):
type: subject
body (可选)
footer (可选)
1. Type
- feat :新功能
- fix : bug修复
- docs :文档变更
- style :与样式相关的所有变动
- refactor :既不是bug修复也未添加功能的代码更改
- test :与测试有关所有变动
- chore :改变了构建任务,程序包管理器配置等
2. Subject
它应该包含对所做更改的简短描述。长度不能超过50个字符,应以大写字母开头,命令式的语法。“Add”,而不是 “Added” 或 “Adds”。
3. Body
正文用于说明你进行了哪些更改以及进行更改的原因。并非所有提交都很复杂,需要一个正文,尤其是如果你仅是开发一个个人的项目,因此正文是可选的。
4. Footer
页脚也是可选的,主要在你使用issue追踪引用issue ID时使用。
这是Udacity学生git 提交信息的例子Udacity Git Commit Message Style Guide
feat: 少于50个字符的更改概括。 如有必要,提供更详细的说明文字,约72字符左右。在某些情况下,第一行被视为提交的主题,其余文本作为正文。 将摘要与正文分开的空行至关重要(除非没有正文);各种工具,例如 log,shortlog和rebase,如果同时运行两者,可能会造成混乱。 解释该提交解决的问题。注意说明为什么做这个更改(代码作了注释)。另一方面,是否会导致负面的作用或其他不直观的后果?这也是需要说明的地方。 空白行之后是其它段落。 - 项目要点也可以加进来 - 通常在项目符号前使用连字符或星号,用一个空格隔开,中间有空白行,但是约定在这里变化 如果你使用issue追踪,可以在footer中写上对issue的关联,就像这样: Resolves: #123See also: #456, #789
这是一个实际的例子:
docs: Fix typo in README.md
正文之外同样有一些有意思的评论(歪果仁会玩啊):
简短明了,感谢你的这篇文章! 我倾向于使用表情符号作为类型——一看就显示了提交的类型,例如:
➕:heavy_plus_sign: 添加文件或实现功能时 ?: hammer: 修复bug或处理issue时 ? :green_heart: 在改进代码或注释时 ⚡:zap: 在提高性能时 ?:scroll: 更新文档或readme时 ?:key: 在处理安全相关时 ? :repeat: 更新依赖或数据时 ✅:white_check_mark: 建立一个新的release时 ?:shirt: 重构或删除linter警告时 ❌:x: 删除代码或文件时
...提交历史看起来很棒:
我讨厌别人这么做。它在git日志中看起来令人困惑。只需使用unicode表情符号,它们就可以在任何地方使用。
顺便说一下,我最喜欢的表情符号用于提交信息:?????? (我通常将它们放在提交信息的末尾)
我目前使用git alias创建带有表情符号的漂亮提交消息,我的提交信息结构如下:
[emoji] <type>(scope): <message>
例如:
? FIX(pages): security issue fix on pages table
这是我的.gitconfig
# Git Commit, Add all and Push — in one step.
cap = "!f() { git commit -m "$@"; }; f"
# NEW.
new = "!f() { git cap "? NEW($1): $2"; }; f"
# IMPROVE.
imp = "!f() { git cap "? IMPROVE($1): $2"; }; f"
# UPDATE.
up = "!f() { git cap "✍? UPDATE($1): $2"; }; f"
# FIX.
fix = "!f() { git cap "? FIX($1): $2"; }; f"
# RELEASE.
rlz = "!f() { git cap "? RELEASE($1): $2"; }; f"
# DOC.
doc = "!f() { git cap "? DOC($1): $2"; }; f"
# TEST.
tst = "!f() { git cap "? TEST($1): $2"; }; f"
# BREAKING CHANGE.
brk = "!f() { git cap "‼️ BREAKING CHANGES($1): $2"; }; f"
# REMOVE
remove = "!f() { git cap "? REMOVE($1): $2"; }; f"
# REFACTOR
ref = "!f() { git cap "♻️ REFACTOR($1): $2"; }; f"
# INITIAL COMMIT
int = "!f() { git cap "? INITIAL COMMIT($1): $2"; }; f"
感谢你的提议!
这是Git表情符号的一个网站:https://gitmoji.carloscuesta.me/
? :tada:初次提交 ? :rocket:[Add] 实现新功能时 ? :hammer:[Fix]修复bug或处理issue时 ? :art:[Refactor] 当重构/改善代码时 ? :construction: [WIP] ? :pencil: [Minor] 一些小更新
大家可以使用随机提交信息生成网站。享受它吧!
https://paulospx.github.io/some_if_statements/commits.html
- HDUOJ----4504 威威猫系列故事——篮球梦
- 推荐一款MySQL优化工具
- HDUOJ----4502吉哥系列故事——临时工计划
- HDUOJ----4004The Frog's Games(二分+简单贪心)
- HDUOJ----4006The kth great number(最小堆...)
- HDUOJ----4501小明系列故事——买年货(三维背包)
- message 弹出窗口
- HDUOJ---1862EXCEL排序
- HDUOJ-----3591The trouble of Xiaoqian
- HDUOJ-----2571跳舞毯
- Facebook开源PyTorch版本fairseq翻译模型,训练速度提高50%
- MySQL数据清理的需求分析和改进
- Go 语言常量
- Go 语言结构
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一起读源码:为什么 loguru 的时间 rotation 不能只精确到天
- Spring Cloud Feign服务之间的调用
- Spring Cloud 之 Ribbon 负载均衡
- JS贪吃蛇
- 微信小程序——轮播图、组件传值、下拉刷新、导航 实战开发
- 从微信网页授权到OAuth 2.0
- 微信小程序常用组件
- React进阶篇(七)React 同构
- 商业数据分析从入门到入职(5)Python基本语法和数据类型
- JavaScript 同步和异步的执行机制问题
- Vue 与小程序:父组件给子组件传值的区别
- Canvas悟空推箱子
- Spring Cloud 之服务网关 Zuul (一)
- React进阶篇(八)react redux
- 通过一个简单例子理解JavaScript闭包和this对象