skills/generate-commit/SKILL.md
依據 Git Diff 產生符合規範的 Commit 訊息,含過渡檔案過濾與拆分建議。
npx skillsauth add CloudyWing/ai-dotfiles generate-commitInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
當使用者的意圖是「建立一個 git commit」時,無論措辭為何,都必須透過本技能執行,不得直接用 Bash 執行 git 指令。涵蓋但不限於以下語意:
在產生 commit 訊息前,必須先看過真實的變更內容,不得僅憑對話記憶:
git status --short 一次掌握所有變更(staged、unstaged、untracked 一併呈現)。git diff HEAD -- <file>,untracked 檔直接讀內容),不得因「檔名已能說明意圖」而略過。不分檔案是否已 staged,全部都要看。🚨 此規則只約束「訊息措辭」,不約束「commit 範圍」。 Subject 與 Body 中對「改了什麼」的描述必須 100% 來自 git diff 的實際輸出,絕對禁止根據對話或記憶推斷、編造 diff 以外的變更。對話上下文僅可用於補充 Body 的動機說明(為什麼改),且須與當次 diff 直接關聯;若無把握,略去動機即可。
範圍判定見步驟 2,與本條無關,不得因某變更「沒在對話提過」就排除它。
預設將所有實際變更納入本次 commit,再扣除雜訊,而非只挑對話提過的檔案:
*.bak、*.tmp、CONTEXT.local.md、明確的除錯或一次性暫存腳本,直接不納入,不需逐一詢問。被自動排除的項目須在最後一併列出,讓使用者可推翻。依「語意關聯」判斷:
hunk 級拆分(同一檔案內含不相關主題、需 git add -p 逐塊 stage)成本高且需使用者來回操作,僅在使用者明確要求時才執行,預設不主動提出。
檔案級拆分計畫格式:
建議拆分為 N 個 commit:
Commit 1:<commit message>
- file_a.cs
- file_b.md
Commit 2:<commit message>
- file_c.cs
確定範圍後,先 stage 範圍內的檔案(git add <files>),再依下方規範產生訊息並 commit,不需另外詢問確認:
git commit。git add -p 完成 staging 並回報,再執行對應的 commit。訊息傳遞方式(強制):含 Body 的多行訊息一律以 git commit -F 從檔案或 stdin 讀取,逐字保留換行與空行。不得用多個 -m 逐行傳遞;git 會將每個 -m 視為獨立段落並在段落間插入空行,使 Body 的條列之間出現多餘空行。
git commit -F -。git commit -F -,或先將訊息寫入暫存檔再以 git commit -F <檔案> 提交。Commit 執行完畢後,輸出最終的 commit 訊息內容(含本次自動排除的檔案清單),供使用者確認是否需要至 git 調整。
Pattern: <type>([scope]): <subject>
feat: 新增過去不存在的功能或能力。fix: 修正既有功能的錯誤,使曾經正確、後來故障的行為恢復正常。refactor: 程式碼重構,對外可觀察行為不變。style: 格式調整(如括號位置、分號,不影響邏輯)。docs: 僅文件異動。perf: 在行為不變的前提下改善效能(不含行銷詞彙)。ci: CI 設定與腳本異動(如 GitHub Actions, GitLab CI, scripts)。test: 新增或修正測試。chore: 建置流程、相依性套件更新、雜項(如 .gitignore)。feat / fix / refactor / perf 的判定,以可觀察行為的變化為準,不以變更動機為準。
Tie-breaker(動機 vs 行為):當變更的動機是「解決某個問題」,但達成手段是新增一條過去不存在的程式路徑時,以「能力是否為新增」為準歸 feat,不因動機像在補洞就歸 fix。唯有該行為曾經正確運作、後來才故障(屬回歸修復)時才歸 fix。
判定範例:
feat(新增過去不存在的能力)。fix(既有行為故障後恢復)。refactor(只動內部結構)。perf(行為不變、效能改善)。src, tests, docs 等)。不在專案目錄結構內的名稱一律不寫 Scope。all, update, config 等無明確邊界的無效 Scope。- 加一個空格作為條列點。。 結尾。Co-Authored-By:commit 訊息不得附加任何 Co-Authored-By: 行,包含 AI 工具的署名。✅ 正確範例:
feat(skills): 新增 check-markdown 技能
- 實作段落空白與全半形符號的自動校對規則。
- 新增技能說明與測試範例。
fix: 修正 commit 規範格式錯誤
- 補齊遺漏的 Body 標題。
- 修正列表縮排層級。
❌ 錯誤範例:
# 模糊動詞 + 不必要的自創 Scope
fix(all): 修改程式碼
# 行銷用語 + 主觀修飾
refactor(prompts): 大幅提升 Prompt 效能與使用者體驗
# 結尾加句號+大陸用語
feat: 添加新的配置項。
tools
PowerShell 腳本撰寫規範:嚴格模式、錯誤處理、參數宣告、Verb-Noun 命名與 5.1 相容語法邊界。當撰寫或修改 `*.ps1` / `*.psm1` 腳本時自動套用。
tools
產生或補齊 .gitattributes,統一行尾處理、二進位識別與 lock files 標記,保留既有自訂偏好。
development
產生或補齊前端 Lint 設定(Prettier + ESLint Flat Config),統一格式化與程式碼品質規則,保留既有自訂偏好。
testing
依據事實校閱報告修改技術文件:以事實層為不可違反的約束,由改檔者負責表達層的措辭與行文連貫。Use when the user asks to apply fact-check results to a document, or to edit a document based on a previously produced fact-check-report.md.