[{"data":1,"prerenderedAt":249},["ShallowReactive",2],{"header-counts":3,"footer-counts":6,"prompt-git-commit-message":9},{"tools":4,"reviews":5},65,7,{"tools":4,"reviews":5,"playbooks":7,"news":8},10,8,{"id":10,"title":11,"body":12,"description":235,"extension":236,"meta":237,"navigation":238,"path":239,"seo":240,"stem":241,"tags":242,"targetTools":244,"__hash__":248},"prompts\u002Fprompts\u002Fgit-commit-message.md","Git Commit Message Prompt：写出团队能读懂的 commit",{"type":13,"value":14,"toc":228},"minimark",[15,19,64,68,72,80,83,100,104,115,179,186,190,208,211,224],[16,17,18],"h2",{"id":18},"用法",[20,21,26],"pre",{"className":22,"code":23,"language":24,"meta":25,"style":25},"language-bash shiki shiki-themes github-light github-dark","git add -p          # stage 你想 commit 的部分\ngit diff --cached   # 看 staged diff\n","bash","",[27,28,29,50],"code",{"__ignoreMap":25},[30,31,34,38,42,46],"span",{"class":32,"line":33},"line",1,[30,35,37],{"class":36},"sScJk","git",[30,39,41],{"class":40},"sZZnC"," add",[30,43,45],{"class":44},"sj4cs"," -p",[30,47,49],{"class":48},"sJ8bj","          # stage 你想 commit 的部分\n",[30,51,53,55,58,61],{"class":32,"line":52},2,[30,54,37],{"class":36},[30,56,57],{"class":40}," diff",[30,59,60],{"class":44}," --cached",[30,62,63],{"class":48},"   # 看 staged diff\n",[65,66,67],"p",{},"把 diff 粘进 AI 配合 prompt：",[16,69,71],{"id":70},"prompt","Prompt",[20,73,78],{"className":74,"code":76,"language":77,"meta":25},[75],"language-text","请基于下面的 git diff 生成 commit message，要求：\n\n**格式**：Conventional Commits\n\n```\n\u003Ctype>(\u003Cscope>): \u003Csubject>\n\n\u003Cbody>\n\n\u003Cfooter>\n```\n\n**type**：feat \u002F fix \u002F refactor \u002F docs \u002F test \u002F chore \u002F perf \u002F style\n\n**铁律**：\n1. **subject ≤ 60 字符**，祈使句（\"add X\" 不是 \"added X\"）\n2. **不要写\"update XX 文件\"**。要写**改了什么行为**。\"update userService.ts\" ❌；\"add retry logic to userService.fetch\" ✅\n3. **body 解释 why，不是 what**——what 看 diff 就知道，why 看不出来\n4. **如果是 fix，body 必须说**：(a) 现象、(b) 根本原因、(c) 修复方式\n5. **scope 取自 diff 涉及的目录\u002F模块**，不要瞎编\n6. **如果 diff 包含多个不相关改动**，告诉我\"建议拆成 N 个 commit\"，**不要硬拼成一条 message**\n\ndiff：\n```\n\u003Cpaste here>\n```\n","text",[27,79,76],{"__ignoreMap":25},[16,81,82],{"id":82},"为什么有效",[84,85,86,94,97],"ul",{},[87,88,89,90,93],"li",{},"\"解释 why 不是 what\"是核心——好 commit message 让 6 个月后 ",[27,91,92],{},"git blame"," 的人能立刻理解决策",[87,95,96],{},"\"建议拆 commit\"防止 AI 把混乱的 diff 强行总结成一条空泛的 message",[87,98,99],{},"对 fix 强制\"现象 \u002F 根因 \u002F 修复\"三段式 = 直接可读的事故记录",[16,101,103],{"id":102},"进阶自动化","进阶（自动化）",[65,105,106,107,110,111,114],{},"把这个 prompt 存成 ",[27,108,109],{},".git\u002Fhooks\u002Fprepare-commit-msg"," 或 ",[27,112,113],{},"claude-code"," 的别名脚本：",[20,116,118],{"className":22,"code":117,"language":24,"meta":25,"style":25},"# ~\u002F.local\u002Fbin\u002Faicommit\ngit diff --cached | claude-code --prompt-file=~\u002F.config\u002Fclaude\u002Fcommit-prompt.md \\\n  | tee \u002Ftmp\u002Fmsg && git commit -F \u002Ftmp\u002Fmsg\n",[27,119,120,125,152],{"__ignoreMap":25},[30,121,122],{"class":32,"line":33},[30,123,124],{"class":48},"# ~\u002F.local\u002Fbin\u002Faicommit\n",[30,126,127,129,131,133,137,140,143,146,149],{"class":32,"line":52},[30,128,37],{"class":36},[30,130,57],{"class":40},[30,132,60],{"class":44},[30,134,136],{"class":135},"szBVR"," |",[30,138,139],{"class":36}," claude-code",[30,141,142],{"class":44}," --prompt-file=",[30,144,145],{"class":135},"~",[30,147,148],{"class":44},"\u002F.config\u002Fclaude\u002Fcommit-prompt.md",[30,150,151],{"class":44}," \\\n",[30,153,155,158,161,164,168,170,173,176],{"class":32,"line":154},3,[30,156,157],{"class":135},"  |",[30,159,160],{"class":36}," tee",[30,162,163],{"class":40}," \u002Ftmp\u002Fmsg",[30,165,167],{"class":166},"sVt8B"," && ",[30,169,37],{"class":36},[30,171,172],{"class":40}," commit",[30,174,175],{"class":44}," -F",[30,177,178],{"class":40}," \u002Ftmp\u002Fmsg\n",[65,180,181,182,185],{},"跑 ",[27,183,184],{},"aicommit"," 就 = 自动 staged diff → AI 写 message → commit。",[16,187,189],{"id":188},"反例ai-默认会写的烂-message","反例（AI 默认会写的烂 message）",[65,191,192,193,196,197,196,200,203,204,207],{},"❌ ",[27,194,195],{},"Update auth.ts and config.ts","\n❌ ",[27,198,199],{},"Various improvements",[27,201,202],{},"Fix bug"," （fix 什么 bug？）\n❌ ",[27,205,206],{},"feat: add new feature","（什么 feature？）",[65,209,210],{},"我们要的好例子：",[65,212,213,214,217,218,217,221],{},"✅ ",[27,215,216],{},"fix(auth): handle 401 from token refresh endpoint","\n✅ ",[27,219,220],{},"refactor(api): extract pagination logic into useCursor hook",[27,222,223],{},"feat(rankings): add real-time tool ranking from db click counts",[225,226,227],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":25,"searchDepth":154,"depth":154,"links":229},[230,231,232,233,234],{"id":18,"depth":52,"text":18},{"id":70,"depth":52,"text":71},{"id":82,"depth":52,"text":82},{"id":102,"depth":52,"text":103},{"id":188,"depth":52,"text":189},"让 AI 基于 git diff 写 commit message，不再是 ","md",{},true,"\u002Fprompts\u002Fgit-commit-message",{"title":11,"description":235},"prompts\u002Fgit-commit-message",[37,243],"commit",[245,246,247],"Claude Code","Cursor","Aider","BgWh3nf3cAize1XJ2qw-oP4rGmt3TJZzfszIRlIPyNc",1782316489338]