vscode git提交模板仅预填内容、不校验格式,强制规范依赖commit-msg钩子(如commitlint);模板首行须为空,第二行起用#注释引导,且必须通过git config commit.template显式配置路径。

VSCode 的 Git 提交模板本身不校验格式,只负责预填内容;真正 enforce 规范的是 commit-msg 钩子(比如 commitlint),模板只是“引导填写”,不是“强制合规”。
模板文件必须以 # 注释开头、首行留空
Git 会忽略所有以 # 开头的行,但要求第一行必须是空行——否则 git commit 会直接跳过模板内容,当成无输入提交失败。常见错误是模板首行写了 # type: ...,结果 VSCode 提交框里啥都不显示。
- ✅ 正确写法:第一行空着,第二行开始写
# type(scope): subject - ❌ 错误写法:首行直接写
# feat(api): ...或feat(api): ...(没#注释会被当真实提交内容,但格式错乱) - 模板路径可以是相对路径(如
.gitmessage)或绝对路径(如~/commit-template),但必须通过git config commit.template显式设置,.vscode/下放无效
git config commit.template 必须分作用域显式配置
VSCode 不读取自己的 settings.json 里的任何 commit 模板字段,它完全依赖 Git 自身配置。项目级和全局配置互不影响,且优先级:本地 > 全局。
- 项目根目录下运行:
git config --local commit.template .gitmessage(推荐,团队统一) - 全局生效(慎用):
git config --global commit.template ~/git-commit-template - 配置后可用
git config --get commit.template验证是否生效 - 如果改了模板文件内容,无需重启 VSCode,下次打开提交框即加载新内容
模板内容怎么写才不和 commitlint 冲突
commitlint 默认只解析提交信息的 header 行(第一行),body 和 footer 是可选的,但有硬性换行规则:header 后必须空一行,再写 body;footer(如 closes #123)需与 body 之间再空一行。模板里若没预留这些空行,开发者容易手误压成一行,导致 lint 报 subject may not be empty 或 body must be at least 10 chars。
- ✅ 推荐模板结构:
# type(scope): subject <h1>body (optional)</h1><h1>closes #ISSUE_NUMBER</h1>
- 模板里的
#行纯属提示,提交时需手动删掉或覆盖;但空行必须保留,否则 commitlint 解析失败 - 如果用了
gitmoji-vscode插件,它只加 emoji 前缀(如? fix:),不处理空行和 body,仍需人工补全 - Conventional Commits 规范中
type必须小写,scope括号不能有空格(feat(auth)✅,feat( auth )❌)
VSCode 提交面板不加载模板?先查这三件事
不是插件问题,也不是 VSCode Bug,90% 是 Git 层配置缺失或路径错位。
- 运行
git config --get commit.template,输出为空说明根本没配 - 检查模板文件路径是否拼错,比如配了
.gitmessage但实际文件叫.gitmessage.txt - 确认当前工作区是 Git 仓库根目录(
git rev-parse --show-toplevel),子目录下--local配置不生效 - 禁用
git.enableSmartCommit设置(在 VSCode settings.json 中设为false),否则它会绕过编辑器,直接用-m提交,模板彻底失效
最易被忽略的一点:模板只是“草稿纸”,不是“审批章”。哪怕填得再规范,没配 commit-msg 钩子,就拦不住 git commit -m "update" 这种提交。模板和钩子必须配齐,才算闭环。











