install
source · Clone the upstream repo
git clone https://github.com/deancourse/git-worktree-demo
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/deancourse/git-worktree-demo "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.agent/skills/git-smart-commit" ~/.claude/skills/deancourse-git-worktree-demo-git-smart-commit && rm -rf "$T"
manifest:
.agent/skills/git-smart-commit/SKILL.mdsource content
Git Smart Commit — 智慧拆分提交
將目前所有 staged / unstaged 變更,依功能邏輯分群後,逐批
git add + git commit。
流程
1. 檢查變更狀態
執行以下指令取得完整變更清單:
git status --short
若沒有任何變更,告知使用者「目前沒有需要提交的變更」後結束。
接著取得所有變更的 diff 內容(用來判斷分群邏輯):
git diff git diff --cached
2. 分析並分群
根據以下維度,將檔案變更分成多個 commit 群組,每組代表一個獨立的邏輯單元:
分群依據(優先順序)
| 優先級 | 維度 | 範例 |
|---|---|---|
| 1 | 專案腳手架 / 設定檔 | , , , , |
| 2 | 資料層 / config data | , , |
| 3 | 元件(按元件名稱分組) | + 對應測試 + 對應樣式 |
| 4 | 頁面 / 路由 | , , |
| 5 | 全域樣式 | , , |
| 6 | 工具 / hooks / 型別 | , , |
| 7 | 測試 | , , |
| 8 | 文件 / 其他 | , (非 README), 其他雜項 |
分群規則
- 同一元件的 JSX/TSX + CSS Module + 測試 → 歸為同一組
- 相關的資料檔如果是為某個元件服務 → 可考慮合併或獨立,取決於變更量
- 若某一組只有 1 個檔案且改動極小(< 5 行)→ 合併到最相關的鄰近組
- 新增檔案用
,修改用feat
/fix
/refactor
,刪除用stylechore
3. 產出 Commit 計畫
在執行任何 git 操作之前,先列出計畫讓使用者確認:
📋 Commit 計畫(共 N 個 commit) 1. chore(project): 初始化專案設定與相依套件 → package.json, vite.config.js, .gitignore 2. feat(data): 新增首頁各區塊的設定資料 → src/data/navigation.js, src/data/hero.js, ... 3. feat(navbar): 新增 Navbar 元件(含 RWD 漢堡選單) → src/components/Navbar.jsx ... 確認執行?(Y/n)
使用
notify_user 工具向使用者展示計畫並等待確認。
4. 逐批執行 Commit
使用者確認後,對每一組依序執行:
git add <file1> <file2> ... git commit -m "<type>(<scope>): <subject>"
Commit Message 格式
<type>(<scope>): <簡短描述,繁體中文>
type 對照表:
| type | 使用時機 |
|---|---|
| 新增功能、元件、頁面 |
| 修復 bug |
| 純樣式調整(不影響邏輯) |
| 重構(不改變行為) |
| 雜務(設定檔、腳手架、CI) |
| 文件更新 |
| 測試相關 |
scope 規則:
- 元件:用元件名稱小寫,例如
,hero
,navbarpricing - 資料層:
data - 全域樣式:
style - 專案設定:
project - 多個範圍:用最主要的一個,不要用斜線串接
subject 規則:
- 使用繁體中文
- 不超過 50 字
- 不以句號結尾
- 用「動詞開頭」:新增、調整、修正、移除、重構
5. 確認結果
所有 commit 完成後,執行:
git log --oneline -20
將結果展示給使用者,確認所有 commit 都已正確建立。
邊界情況處理
- 有衝突或 merge 狀態:提醒使用者先解決衝突,不執行任何操作
- 有
或敏感檔案:提醒使用者確認是否應被 gitignore,不自動提交.env - 變更量極大(> 50 個檔案):先產出分組摘要,請使用者確認後再執行
- 使用者已有部分 staged 變更:尊重已 staged 的狀態,將其視為一個獨立群組或合併到最相關的群組