Git Commit 模板完整配置指南

📋 目录

  • Git Commit 模板完整配置指南
    • 📋 目录
    • 🎯 为什么需要 Commit 模板
    • 📝 推荐的 Commit 模板
      • 标准模板格式
      • C++ 项目特化模板
    • ⚙️ 系统级配置
      • 1. 创建模板文件
      • 2. 配置 Git 使用模板
      • 3. 验证配置
    • 🔤 Commit 类型词汇字典
      • 基础类型
      • C++ 专用类型
      • 项目管理类型
    • 💻 VSCode 集成配置
      • 方法一:使用 Git Graph 插件
      • 方法二:使用 Conventional Commits 插件
      • 方法三:使用代码片段
    • 🔧 CLion 集成配置
      • 配置 Commit 模板
      • 使用 Live Templates
    • 📖 使用示例
      • 好的 Commit 示例
      • 避免的写法
    • 🛠️ 高级配置
      • 项目级配置
      • 团队共享配置
      • 自动化验证
    • 💡 最佳实践
    • 🔗 参考资源

🎯 为什么需要 Commit 模板

使用规范的 commit 模板有以下好处:

  • 📈 提高代码历史可读性:统一的格式让团队成员快速理解变更
  • 🤖 支持自动化工具:可以自动生成 changelog、版本号等
  • 🔍 便于查找和过滤:通过类型快速定位特定类型的提交
  • 👥 团队协作规范:统一团队的提交标准

📝 推荐的 Commit 模板

标准模板格式

基于 Conventional Commits 规范:

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

C++ 项目特化模板

针对 C++ 项目的优化模板:

<type>(<component>): <description># 详细说明 (可选)
# - 为什么做这个变更?
# - 解决了什么问题?
# - 对性能/内存的影响?# 破坏性变更 (如果有)
# BREAKING CHANGE: # 关联问题 (如果有)
# Fixes #123
# Closes #456
# Refs #789# 测试说明 (如果有)
# - 单元测试:
# - 集成测试:
# - 性能测试:

⚙️ 系统级配置

1. 创建模板文件

首先创建模板文件:

# 在用户主目录创建模板文件
touch ~/.gitmessage.txt

编辑 ~/.gitmessage.txt 文件内容:

# <type>(<scope>): <subject>
# 
# <body>
# 
# <footer># 🏷️ Type 类型说明:
# feat     新功能
# fix      Bug修复
# docs     文档更新
# style    代码格式化(不影响功能)
# refactor 重构代码
# perf     性能优化
# test     测试相关
# build    构建系统或依赖管理
# ci       CI/CD配置
# chore    其他杂项更改
# revert   回滚提交
#
# 📦 Scope 范围说明 (C++项目):
# core     核心功能模块
# api      API接口
# ui       用户界面
# db       数据库相关
# net      网络通信
# algo     算法实现
# mem      内存管理
# thread   多线程
# io       输入输出
# config   配置管理
# test     测试代码
# build    构建配置
# deps     依赖管理
#
# 📝 Subject 主题说明:
# - 使用中文或英文均可
# - 首字母小写
# - 结尾不加句号
# - 控制在50字符以内
#
# 📖 Body 说明:
# - 详细描述变更内容
# - 说明变更原因和影响
# - 每行控制在72字符以内
#
# 🔗 Footer 说明:
# - 关联的Issue: Fixes #123, Closes #456
# - 破坏性变更: BREAKING CHANGE: xxx
# - 其他相关信息

2. 配置 Git 使用模板

# 全局配置
git config --global commit.template ~/.gitmessage.txt# 或者只为当前项目配置
git config commit.template ~/.gitmessage.txt

3. 验证配置

# 查看当前配置
git config --get commit.template# 测试模板
git commit

🔤 Commit 类型词汇字典

基础类型

类型英文描述使用场景
✨ 新功能feat新增功能特性添加新的API、新的用户功能
🐛 修复fix修复Bug修复崩溃、逻辑错误、内存泄漏
📚 文档docs文档更新README、注释、API文档
💎 样式style代码格式化缩进、空格、命名规范
♻️ 重构refactor重构代码优化结构但不改变功能
⚡ 性能perf性能优化算法优化、内存优化
✅ 测试test测试相关单元测试、集成测试
🔧 构建build构建系统CMake、Makefile、依赖
👷 CIci持续集成GitHub Actions、Jenkins
🎨 杂项chore其他杂项配置文件、工具更新

C++ 专用类型

类型英文描述使用场景
🔒 安全security安全相关修复安全漏洞、权限控制
💾 内存memory内存管理内存泄漏修复、智能指针
🧵 线程thread多线程相关线程安全、并发优化
📡 网络network网络通信TCP/UDP、协议实现
🎛️ 接口interface接口变更API设计、接口重构
📊 算法algorithm算法实现数据结构、算法优化
🔌 插件plugin插件系统插件架构、模块化
⚙️ 配置config配置管理配置文件、参数调优

项目管理类型

类型英文描述使用场景
🎉 初始init项目初始化项目创建、初始提交
🔖 版本release版本发布版本标签、发布准备
⏪ 回滚revert回滚变更撤销之前的提交
🔀 合并merge分支合并合并分支、解决冲突
🚀 部署deploy部署相关部署脚本、环境配置

💻 VSCode 集成配置

方法一:使用 Git Graph 插件

  1. 安装插件

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • 打开 VSCode 扩展市场 (Ctrl+Shift+X)
    • 搜索并安装 “Git Graph”
  2. 配置插件

    // settings.json
    {"git-graph.commitDetailsView.fileView.fileTree.compactFolders": false,"git-graph.commitDetailsView.location": "Docked to Bottom","git-graph.repository.commits.showSignatureStatus": true
    }
    

方法二:使用 Conventional Commits 插件

  1. 安装插件

    • 搜索并安装 “Conventional Commits”
  2. 配置插件

    // settings.json
    {"conventionalCommits.emojiFormat": "emoji","conventionalCommits.showEditor": true,"conventionalCommits.promptBody": true,"conventionalCommits.promptFooter": true,"conventionalCommits.scopes": ["core", "api", "ui", "db", "net", "algo", "mem", "thread", "io", "config", "test", "build"]
    }
    

方法三:使用代码片段

创建 commit 消息代码片段:

  1. 打开代码片段设置

    • Ctrl+Shift+P → “Preferences: Configure User Snippets”
    • 选择 “git-commit” 或创建全局片段
  2. 添加片段

    {"Conventional Commit": {"prefix": "commit","body": ["${1|feat,fix,docs,style,refactor,perf,test,build,ci,chore|}(${2:scope}): ${3:description}","","${4:// 详细说明}","","${5:// Footer}"],"description": "Conventional commit template"},"C++ Commit": {"prefix": "cppcommit","body": ["${1|feat,fix,refactor,perf,memory,thread,algorithm|}(${2|core,api,mem,thread,net,algo|}): ${3:description}","","${4:// 变更说明:}","${5:// - 影响范围:}","${6:// - 性能影响:}","","${7:// Fixes #${8:issue_number\\}}"],"description": "C++ specific commit template"}
    }
    

🔧 CLion 集成配置

配置 Commit 模板

  1. 打开设置

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • FileSettings (Windows/Linux) 或 CLionPreferences (macOS)
  2. 配置 VCS

    • 导航到 Version ControlGit
    • 在 “Commit Message Template” 中添加模板路径:~/.gitmessage.txt
  3. 配置 Commit Dialog

    • Version ControlCommit
    • 勾选 “Use non-modal commit interface”
    • 设置 “Right margin (columns)” 为 72

使用 Live Templates

  1. 创建 Live Template

    • FileSettingsEditorLive Templates
    • 点击 + 创建新的 Template Group:“Git Commits”
  2. 添加模板

    Abbreviation: cc
    Description: Conventional Commit
    Template text:
    $TYPE$($SCOPE$): $DESCRIPTION$$BODY$$FOOTER$
    
  3. 设置变量

    • TYPE: enum("feat","fix","docs","style","refactor","perf","test","build","ci","chore")
    • SCOPE: enum("core","api","ui","db","net","algo","mem","thread","io","config")
    • DESCRIPTION: 无默认值
    • BODY: 无默认值
    • FOOTER: 无默认值

📖 使用示例

好的 Commit 示例

# 新功能
feat(network): 添加TCP客户端自动重连功能实现了指数退避算法的自动重连机制,包括:
- 可配置的初始延迟、最大延迟和递增倍数
- 使用condition_variable实现可中断等待
- 优雅的线程管理和资源清理性能影响:重连延迟从固定1秒优化为自适应延迟
内存影响:增加约200字节的配置存储开销Fixes #123
# Bug修复
fix(memory): 修复DeviceTcpClient线程无法正常退出的问题问题描述:
- 程序退出时TCP客户端线程被阻塞在sleep操作中
- 导致程序无法优雅关闭,需要强制kill解决方案:
- 使用condition_variable替代sleep进行可中断等待
- 在stop()方法中使用detach()而不是join()避免主线程阻塞
- 添加多层次的停止标志检查测试验证:
- 单元测试:✅ 所有连接管理测试通过
- 集成测试:✅ 程序可在3秒内正常退出
- 压力测试:✅ 1000次启停循环无内存泄漏Closes #456
# 性能优化
perf(algorithm): 优化字符串匹配算法性能使用KMP算法替换暴力匹配,在大数据集上性能提升85%:
- 平均时间复杂度从O(mn)降低到O(m+n)
- 内存使用量减少30%
- 支持Unicode字符串匹配Benchmark结果:
- 1MB文本搜索:450ms → 68ms
- 10MB文本搜索:4.2s → 0.6sRefs #789

避免的写法

# ❌ 太简单,信息不足
fix bug# ❌ 没有类型标识
修复了一个内存泄漏问题# ❌ 描述不清楚
feat: 添加了一些功能# ❌ 主题行太长
feat(network): 添加了TCP客户端自动重连功能包括指数退避算法可配置参数以及优雅的线程管理# ❌ 混合多种变更
feat: 添加新功能并修复bug同时更新文档

🛠️ 高级配置

项目级配置

在项目根目录创建 .gitmessage 文件:

# 项目特定的模板
cat > .gitmessage << 'EOF'
feat(component): description# Project: NeuroHub
# Team: Network Team
# Reviewer: @reviewer# 变更检查清单:
# [ ] 代码已通过静态分析
# [ ] 已添加单元测试
# [ ] 已更新文档
# [ ] 已检查内存泄漏
# [ ] 已进行性能测试Fixes #
EOF# 配置项目使用该模板
git config commit.template .gitmessage

团队共享配置

创建 .gitconfig-template 文件供团队使用:

[commit]template = ~/.gitmessage.txtverbose = true[core]editor = code --wait  # 或 vim, nano 等[alias]# 便捷的commit别名cf = commit --no-verify  # 跳过pre-commit hooksca = commit --amend      # 修改最后一次提交cm = commit -m           # 快速提交cmt = commit             # 使用模板提交

自动化验证

创建 pre-commit hook 验证 commit 消息格式:

#!/bin/sh
# .git/hooks/commit-msgcommit_regex='^(feat|fix|docs|style|refactor|perf|test|build|ci|chore)(\(.+\))?: .{1,50}'if ! grep -qE "$commit_regex" "$1"; thenecho "Invalid commit message format!"echo "Format: type(scope): description"echo "Example: feat(api): add user authentication"exit 1
fi

💡 最佳实践

  1. 主题行原则

    • 长度控制在50字符以内
    • 使用动词原形开头
    • 首字母小写
    • 结尾不加句号
  2. 正文内容

    • 每行不超过72字符
    • 说明"是什么"和"为什么",而不是"怎么做"
    • 多个段落用空行分隔
  3. Footer规范

    • 关联Issue:Fixes #123, Closes #456
    • 破坏性变更:BREAKING CHANGE: API changed
    • 共同作者:Co-authored-by: Name <email>
  4. C++ 项目特殊考虑

    • 说明内存和性能影响
    • 注明线程安全性变更
    • 记录API兼容性变化
    • 包含测试覆盖率信息
  5. 提交频率

    • 小步快跑,一次提交解决一个问题
    • 避免混合不相关的变更
    • 确保每次提交都能编译通过

🔗 参考资源

  • Conventional Commits 规范
  • Angular Commit Guidelines
  • How to Write a Git Commit Message
  • Semantic Versioning
  • Git Hooks Documentation

💡 提示: 将此文档保存为团队文档,定期更新模板以适应项目需求的变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87801.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87801.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/87801.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ELK服务搭建】

Ubuntu 20.04环境下部署Elastic Stack 8.18日志系统完整指南 一、环境准备 系统要求 Ubuntu 20.04 LTS硬件配置&#xff1a;4核CPU / 8GB内存 / 100GB硬盘网络&#xff1a;需外网访问权限 1. 基础环境配置 首先安装SSH服务以便远程管理&#xff1a; # 更新软件源 apt u…

Mac电脑 Office 2024 LTSC 长期支持版(Excel、Word、PPT)

Office 2024 mac&#xff0c;是一款是一款专为苹果电脑用户设计的高性能、高安全性的办公套装 集成了Word、Excel、PowerPoint、Outlook等经典应用&#xff0c;为用户提供了一站式的办公解决方案。 不仅继承了Office系列一贯的卓越性能&#xff0c;还在功能性和用户体验上进行…

深入解析 Schema 在不同数据库中的百变面孔

在数据库的世界里&#xff0c;数据是核心资产&#xff0c;但如何高效、有序、安全地组织和理解这些数据&#xff1f;答案就是 Schema&#xff08;模式或架构&#xff09;。它如同建筑的图纸、乐队的乐谱&#xff0c;是数据库的设计蓝图和运行规则手册。今天&#xff0c;我们就来…

Python 数据分析与可视化 Day 2 - 数据清洗基础

&#x1f3af; 今日目标 学会识别和处理缺失数据&#xff08;NaN&#xff09;学会删除/填补缺失值清理重复数据修改列类型&#xff0c;准备数据分析 &#x1f9fc; 一、缺失值处理&#xff08;NaN&#xff09; ✅ 1. 检查缺失值 import pandas as pd df pd.read_csv("…

3DS中文游戏全集下载 任天堂3DS简介3DS第一方独占游戏推荐

任天堂3DS 的详细介绍&#xff0c;涵盖其硬件特性、核心功能、游戏阵容及历史地位&#xff1a; 3DS游戏全集下载 https://pan.quark.cn/s/dd40e47387e7 https://sink-698.pages.dev/3ds CIA CCA 等格式可用于3DS模拟器和3DS实体机 3DS 是什么&#xff1f; 全称&#xff1a;Nin…

【Python小练习】3D散点图

资产风险收益三维分析 背景 王老师是一名金融工程研究员&#xff0c;需要对多个资产的预期收益、风险&#xff08;波动率&#xff09;和与市场的相关性进行综合分析&#xff0c;以便为投资组合优化提供决策依据。 代码实现 import matplotlib.pyplot as plt from mpl_toolk…

安宝特案例丨突破传统手术室,Vuzix AR 眼镜圆满助力全膝关节置换术

在巴西圣保罗医院的手术室里&#xff0c;骨科权威 Ricardo Gobbi医生正戴着 安宝特 Vuzix 智能 AR 眼镜&#xff0c;为一位膝关节炎患者实施全膝关节置换术。与传统手术不同的是&#xff0c;他的视野中实时叠加着骨骼三维模型、切割路径标线和动态数据 —— 这并非科幻场景&…

qt设置文件自动保存-cnblog

步骤&#xff1a; 「工具」->「选项」->「环境」->「Auto-save modified files」。 可开启/关闭自动保存文件功能&#xff0c;还可设置自动保存时间的间隔(最短间隔1分钟)。 钟)。

linux下如何找到dump文件被生成到哪里了

在大多数 Linux 系统中&#xff0c;核心转储文件&#xff08;core dump&#xff09;通常由系统自动保存在当前工作目录下&#xff0c;或者由配置决定其保存位置。核心转储文件的默认文件名通常包含进程 ID&#xff08;PID&#xff09;和程序名&#xff0c;例如 core.PID 或 cor…

API 调试工具校验 JSON Mock 接口(一):无参请求与基础响应验证

在前后端分离的开发模式中&#xff0c;JSON Mock 工具为前端开发人员在后端接口未就绪时提供了极大便利&#xff0c;能够模拟返回 JSON 数据的 API 接口&#xff0c;实现前端独立开发与测试。而 API 开发调试工具 作为一款强大的接口测试工具&#xff0c;可进一步对这些 Mock 接…

单体架构、微服务架构和分布式架构的区别

. 架构定义与核心特征 1.1 单体架构(Monolithic Architecture) 单体架构是将所有功能模块集中在一个单一代码库中的传统架构模式: 所有功能(UI层、业务逻辑、数据访问)打包为单一部署单元通常使用单一技术栈开发(如Spring Boot、Django等)共享单一数据库实例进程内通信(方法…

如何重新安装 Rust

在开发过程中&#xff0c;我们有时可能需要重新安装 Rust&#xff0c;比如遇到版本冲突、环境配置错误&#xff0c;或者仅仅是想更新到最新版本。本文将详细介绍如何卸载现有 Rust 安装&#xff0c;并重新安装 Rust&#xff0c;同时还会介绍一些常见的配置技巧&#xff0c;帮助…

使用springboot实现过滤敏感词功能

一&#xff0c;在springboot项目的resources目录里创建sensitive-words.text&#xff08;敏感词文本&#xff09; 每个词独自一行 列如&#xff1a; 赌博 吸毒 开票 二&#xff0c;在util创建工具类SensitiveFilter package com.nowcoder.community.util;Component public c…

Vue 苍穹外卖

Vue 苍穹外卖 node_modules&#xff1a;当前项目依赖的js包 assets&#xff1a;静态资源存放目录 components&#xff1a;公共组件存放目录 App.vue&#xff1a;项目的主组件&#xff0c;页面的入口文件 main.js&#xff1a;整个项目的入口文件 package.json&#xff1a;项…

评估视觉在CNN 在人类动作识别准确率

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 本研究使用 COCO 图像语料库的三类子集探索人类动作识别&#xff0c;对从简单的全连接网络到 transformer 架构的模型进行基准测试。二进制 Vision Transformer &#xff08;ViT&#xff09; 实现了…

Self-supervised Learning(BERT/GPT/T5)

李宏毅老师《Pre-train Model》 什么是:Self-supervised Learning BERT BERT 能做什么 Mask Input Next Sentence Prediction(not helpful) BERT其它的能力 上述的能力&#xff0c;可以认为是一种填空的能力&#xff0c;那么除了这些&#xff0c;还有哪些有用的能力呢&…

《NuGet:.NET开发的魔法包管理器》

一、NuGet 初相识 在软件开发的广袤天地中&#xff0c;依赖管理始终是一个核心议题。想象一下&#xff0c;在没有高效包管理工具的年代&#xff0c;开发者如同在黑暗中摸索前行。当项目逐渐庞大&#xff0c;所需的外部库和组件日益增多&#xff0c;手动管理这些依赖就如同一场噩…

Vulkan 学习笔记12—深度缓冲

一、3D几何体与深度问题 Z坐标引入 将2D几何体扩展为3D时&#xff0c;需在Vertex结构体中添加glm::vec3 pos表示三维位置&#xff0c;并更新顶点输入描述符格式为VK_FORMAT_R32G32B32_SFLOAT。顶点着色器需接收3D坐标并通过模型-视图-投影矩阵转换为裁剪坐标。 深度冲突问题 当…

AWS EC2使用SSM会话管理器连接

&#x1f9e9; 前提条件 已创建并运行中的 Amazon EC2 实例&#xff08;Amazon Linux 2023&#xff09; 拥有管理员权限的 AWS 账户 已连接到实例&#xff08;例如通过 EC2 Instance Connect&#xff09; 第一步&#xff1a;手动安装 SSM Agent Amazon Linux 2023 默认未安…

Llama 4 模型卡及提示格式介绍

以下是Llama 4支持的特殊标记和标签的完整列表: 通用标记 <|begin_of_text|>:指定提示符的开始。 <|end_of_text|>:模型将停止生成更多标记。此标记仅由预训练的模型生成。 <|header_start|>…<|header_end|>:这些标记包含特定消息的角色。可能的…