Git commit模板仅在交互式提交(即不带-m参数)时生效,需配置绝对路径的commit.template、正确设置core.editor,且禁用IDE的快捷提交功能。

Git commit 模板不会自动生效,必须满足三个硬性条件:配置了 commit.template、路径是绝对路径、且提交时走的是 Git 的编辑器流程(即不带 -m)。
git config --global commit.template 配置后为什么没反应
最常见原因是:你仍在用 git commit -m "xxx" 或 IDE 插件的快捷提交(如 Sublime Text 的 Git: Commit、VSCode 的 “Commit” 按钮),这些方式绕过了 Git 编辑器流程,commit.template 完全不加载。
- 模板只对交互式提交生效——也就是执行
git commit不带-m参数时,Git 启动编辑器填内容 - Sublime Text 默认 Git 插件调用的是
git commit -m "",所以永远看不到模板 - VSCode 如果启用了
git.enableSmartCommit(默认开启),也会跳过编辑器直接提交 - 验证是否生效:终端里运行
git commit(不加任何参数),看弹出的编辑器里是否预填了模板内容
模板文件放哪?路径怎么写才被 Git 读到
Git 只认配置项里写的路径,不自动扫描项目目录或用户目录。路径必须是绝对路径,且文件存在、可读、UTF-8 无 BOM。
- Linux/macOS 推荐放在
~/git-commit-template,配置命令:git config --global commit.template /home/yourname/git-commit-template(不要用~符号,Git 不展开) - Windows 推荐放在
C:/Users/YourName/git-commit-template,配置命令:git config --global commit.template C:/Users/YourName/git-commit-template(注意用正斜杠 /,不是反斜杠 \) - 项目级配置可用相对路径(仅限项目根目录下),例如
.gitmessage,配置:git config commit.template .gitmessage - 别把模板丢进
.vscode/、src/、resources/这类目录——Git 根本不会去找
Sublime Text / VSCode / CLion 怎么让模板真正出现
IDE 本身不解析 commit.template,只是调用 Git 命令。能否看到模板,取决于 Git 是否启动编辑器,以及编辑器是否被正确指定。
- 先确保 Git 知道用哪个编辑器:
git config --global core.editor "subl --wait"(macOS/Linux)或git config --global core.editor "C:/Program Files/Sublime Text/subl.exe --wait"(Windows) - VSCode 用户需关掉
git.enableSmartCommit(在设置里搜这个选项并禁用),否则点击“√”就直接提交,不走模板 - CLion 要在
Settings > Version Control > Git里确认 External diff tool 和 Path to Git executable 正确,再配合core.editor配置 - Sublime Text 若坚持用插件内提交,得换用
SublimeGit插件,并开启git_commit_use_template设置
模板内容格式和容易被忽略的细节
Git 会自动过滤以 # 开头的行,但首行不能是注释——否则提交时会报 Aborting commit due to empty commit message 错误。
- 推荐结构:第一行留空,第二行开始写注释说明,第三行起才是可编辑的占位内容,例如:
# feat(scope): <short description> # # [optional body] # # [optional footer] # feat():
- 文件编码必须是 UTF-8 无 BOM,Windows 记事本保存时容易带 BOM,建议用 VSCode、Sublime Text 或
iconv转换 - 模板没有强制力——开发者删光内容也能提交;真要 enforce 格式,得配
commit-msg钩子 + CI 校验
真正卡住人的从来不是怎么写模板,而是搞不清 Git 什么时候读它、IDE 什么时候绕过它、编辑器路径为什么总配错。多试一次 git commit(不带 -m)在终端里跑,比反复改 IDE 设置管用得多。



















