当前位置: 首页 > news >正文

写出优秀的 Git 提交信息:一份详尽指南(Angular 风格)

在现代软件开发中,良好的 Git 提交信息不仅有助于项目协作、问题追踪和历史回溯,更是保障项目可维护性的重要一环。本文将基于 AngularJS 团队广泛使用的 Git 提交信息规范,手把手教你如何写出专业、统一、可读性强的 commit message。


✨ 为什么要遵守 Git 提交规范?

遵守统一的提交规范可以带来以下好处:

  • ✅ 自动生成清晰的 CHANGELOG.md
  • ✅ 在使用 git bisect 调试时可跳过不相关提交
  • ✅ 浏览历史时一目了然,快速定位变更位置与内容
  • ✅ 增强协作与团队沟通效率
  • ✅ 为代码审查、回滚、统计等操作提供结构化支持

🧱 提交信息的结构

标准的 Git 提交信息应遵循以下格式:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

⚠️ 每一行 建议不超过 100 个字符,以便在 Git 工具或 GitHub 等平台中更好地展示。


1️⃣ Header(头部)

格式如下:

<type>(<scope>): <subject>
  • type:说明 commit 的类型(详见下文)
  • scope:可选,说明 commit 影响的范围(如模块、组件等)
  • subject:简洁明了地描述本次修改内容(动词开头、小写、无句号)

📌 示例:

feat(router): add lazy-loading support
fix(login): prevent crash on invalid credentials
docs(api): update user guide for v2 endpoints

2️⃣ Type(类型)

下面是推荐的类型(type)及其用途说明:

Type用途
feat新功能
fix修复 Bug
docs文档变更
style格式修改(不影响逻辑,例如空格、分号等)
refactor代码重构(不是新功能,也不是 Bug 修复)
test增加测试或修改现有测试
chore构建流程、工具等杂项维护
revert回滚某次提交

3️⃣ Scope(范围)

scope 是对变更影响模块的说明,例如:

  • 模块名:$http, $compile, auth, router
  • 文件或功能名:ngClick, form, login-page

没有明确 scope 时,可以使用 * 代替:

chore(*): update all dependencies

4️⃣ Subject(主题)

这是 commit 的简要描述:

  • 使用动词原形,如:“add”、“fix”、“refactor”
  • 使用现在时态:如 “change”,而非 “changed”
  • 不以大写字母开头,不以句号结尾

✅ 正确示例:

add support for dark mode

❌ 错误示例:

Added support for dark mode.

5️⃣ Body(正文)

正文用于说明提交的 动机前后行为对比技术细节。规范要求:

  • 使用 现在时命令式语气
  • 分段描述,避免堆砌句子

📌 示例:

Old behavior did not support lazy loading,
which caused bundle size to be large on initial load.This commit introduces a dynamic import-based strategy
to only load modules when needed.

6️⃣ Footer(页脚)

页脚用于列出:

🔥 Breaking Changes(破坏性变更)

使用 BREAKING CHANGE: 开头,说明该变更会破坏兼容性,并附上迁移建议:

BREAKING CHANGE: remove deprecated `authToken` paramUse `accessToken` instead and update middleware config accordingly.
🐛 关联 Issues

通过 Closes #123 形式自动关闭对应 Issue:

Closes #123, #456

🔁 Revert(回滚提交)

如果需要撤销某次提交,格式如下:

revert: feat(router): add lazy-loading supportThis reverts commit e7a8db27f2d8deac3c8e2731ffb33f.

📜 使用范例大全

以下是一些完整的 commit message 示例,供参考:

feat($browser): onUrlChange event (popstate/hashchange/polling)Added new event to $browser:
- forward popstate event if available
- fallback to hashchange
- finally use polling if no event is supportedBREAKING CHANGE: removed $browser.onHashChange
Closes #128
fix($compile): fix HTML serialization in IE9Older IE versions serialize HTML in uppercase, but IE9 does not.
Case-insensitive comparison is required, but jasmine lacks support.Closes #392
docs(guide): fix typos in directive guide- correct batchLogbatchLog -> batchLog
- fix indentation and braces

💡 实用技巧与命令推荐

🔍 查看历史提交摘要(Subject):

git log <last-tag> HEAD --pretty=format:"%s"

🔎 仅筛选新增功能提交:

git log <last-tag> HEAD --grep feat

🚫 忽略无意义提交(如格式调整):

git bisect skip $(git rev-list --grep irrelevant <good-commit> HEAD)

✅ 总结

一个优秀的提交信息应当是:

  • 格式统一
  • 信息清晰
  • 语义明确
  • 可自动化处理(如生成 changelog)

如果你想让你的团队协作更顺畅,让开源项目更专业,从写好每一个 commit message 开始吧!


🔗 参考资料

  • AngularJS Git Commit Guidelines
  • How to Write a Git Commit Message – Chris Beams
  • A Note About Git Commit Messages – tBaggery
http://www.dtcms.com/a/249366.html

相关文章:

  • 板凳-------Mysql cookbook学习 (十--6)
  • 1 Studying《Arm A715 Software Optimization Guide》
  • Vue 事件修饰符详解
  • Java相关-链表-设计链表-力扣707
  • JavaScript基础-阻止事件冒泡
  • Linux 系统目录结构概述-linux024
  • 实现回显服务器(基于UDP)
  • 自定义 eslint 规则
  • PDF转Markdown基准测试
  • SKUA-GOCAD入门教程-第八节 线的创建与编辑3
  • uniapp的app项目,在华为pad上运行,页面显示异常
  • Odoo 如何系统地管理产品从概念设计到废弃淘汰的全过程
  • pycharm 2025.1.1-专业版jupyter notebook远程连接
  • 从STM32到NXP:GPIO就像装修房子,多了个“智能开关”
  • RabbitMQ的交换机和队列概念
  • 前端面试专栏-主流框架:7. React核心概念(组件、JSX、状态管理)
  • 从数据孤岛到智能决策:数据编排如何重构企业数据架构?
  • Java重构实战:小步快跑的高效策略分析
  • 创客匠人:AI重构知识IP定位与变现效率新范式
  • 浏览器读取图片的元数据XMP
  • langchain从入门到精通(七)——利用回调功能调试链应用 - 让过程更透明
  • 如何在 Elementary OS 上安装 Snap Store
  • HarmonyOS 5鸿蒙多端编译实战:从Android/iOS到HarmonyOS 5 的跨端迁移指南详
  • 【Unity】MiniGame编辑器小游戏(一)俄罗斯方块【Tetris】
  • Python 自动化测试/脚本
  • 使用 vscode 开发 uni-app 项目时如何解决 manifest.json 文件注释报错的问题
  • Java-46 深入浅出 Tomcat 核心架构 Catalina 容器全解析 启动流程 线程机制
  • Linux集市采购指南[特殊字符]:yum和apt的“抢货”大战!
  • 【Linux教程】Linux 生存指南:掌握常用命令,避开致命误操作
  • 如何安全高效地维护CMS智能插件?