Git Commit 模板完整配置指南
📋 目录
- Git 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、依赖 |
👷 CI | ci |
持续集成 | GitHub Actions、Jenkins |
🎨 杂项 | chore |
其他杂项 | 配置文件、工具更新 |
C++ 专用类型
类型 | 英文 | 描述 | 使用场景 |
---|---|---|---|
🔒 安全 | security |
安全相关 | 修复安全漏洞、权限控制 |
💾 内存 | memory |
内存管理 | 内存泄漏修复、智能指针 |
🧵 线程 | thread |
多线程相关 | 线程安全、并发优化 |
📡 网络 | network |
网络通信 | TCP/UDP、协议实现 |
🎛️ 接口 | interface |
接口变更 | API设计、接口重构 |
📊 算法 | algorithm |
算法实现 | 数据结构、算法优化 |
🔌 插件 | plugin |
插件系统 | 插件架构、模块化 |
⚙️ 配置 | config |
配置管理 | 配置文件、参数调优 |
项目管理类型
类型 | 英文 | 描述 | 使用场景 |
---|---|---|---|
🎉 初始 | init |
项目初始化 | 项目创建、初始提交 |
🔖 版本 | release |
版本发布 | 版本标签、发布准备 |
⏪ 回滚 | revert |
回滚变更 | 撤销之前的提交 |
🔀 合并 | merge |
分支合并 | 合并分支、解决冲突 |
🚀 部署 | deploy |
部署相关 | 部署脚本、环境配置 |
💻 VSCode 集成配置
方法一:使用 Git Graph 插件
安装插件
- 打开 VSCode 扩展市场 (
Ctrl+Shift+X
) - 搜索并安装 “Git Graph”
- 打开 VSCode 扩展市场 (
配置插件
// settings.json { "git-graph.commitDetailsView.fileView.fileTree.compactFolders": false, "git-graph.commitDetailsView.location": "Docked to Bottom", "git-graph.repository.commits.showSignatureStatus": true }
方法二:使用 Conventional Commits 插件
安装插件
- 搜索并安装 “Conventional Commits”
配置插件
// 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 消息代码片段:
打开代码片段设置
Ctrl+Shift+P
→ “Preferences: Configure User Snippets”- 选择 “git-commit” 或创建全局片段
添加片段
{ "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 模板
打开设置
File
→Settings
(Windows/Linux) 或CLion
→Preferences
(macOS)
配置 VCS
- 导航到
Version Control
→Git
- 在 “Commit Message Template” 中添加模板路径:
~/.gitmessage.txt
- 导航到
配置 Commit Dialog
- 在
Version Control
→Commit
中 - 勾选 “Use non-modal commit interface”
- 设置 “Right margin (columns)” 为 72
- 在
使用 Live Templates
创建 Live Template
File
→Settings
→Editor
→Live Templates
- 点击
+
创建新的 Template Group:“Git Commits”
添加模板
Abbreviation: cc Description: Conventional Commit Template text: $TYPE$($SCOPE$): $DESCRIPTION$ $BODY$ $FOOTER$
设置变量
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.6s
Refs #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.txt
verbose = true
[core]
editor = code --wait # 或 vim, nano 等
[alias]
# 便捷的commit别名
cf = commit --no-verify # 跳过pre-commit hooks
ca = commit --amend # 修改最后一次提交
cm = commit -m # 快速提交
cmt = commit # 使用模板提交
自动化验证
创建 pre-commit hook 验证 commit 消息格式:
#!/bin/sh
# .git/hooks/commit-msg
commit_regex='^(feat|fix|docs|style|refactor|perf|test|build|ci|chore)(\(.+\))?: .{1,50}'
if ! grep -qE "$commit_regex" "$1"; then
echo "Invalid commit message format!"
echo "Format: type(scope): description"
echo "Example: feat(api): add user authentication"
exit 1
fi
💡 最佳实践
主题行原则
- 长度控制在50字符以内
- 使用动词原形开头
- 首字母小写
- 结尾不加句号
正文内容
- 每行不超过72字符
- 说明"是什么"和"为什么",而不是"怎么做"
- 多个段落用空行分隔
Footer规范
- 关联Issue:
Fixes #123, Closes #456
- 破坏性变更:
BREAKING CHANGE: API changed
- 共同作者:
Co-authored-by: Name <email>
- 关联Issue:
C++ 项目特殊考虑
- 说明内存和性能影响
- 注明线程安全性变更
- 记录API兼容性变化
- 包含测试覆盖率信息
提交频率
- 小步快跑,一次提交解决一个问题
- 避免混合不相关的变更
- 确保每次提交都能编译通过
🔗 参考资源
- Conventional Commits 规范
- Angular Commit Guidelines
- How to Write a Git Commit Message
- Semantic Versioning
- Git Hooks Documentation
💡 提示: 将此文档保存为团队文档,定期更新模板以适应项目需求的变化。