dhpk-git-smart-commitlisted
Install: claude install-skill hmj1026/dhpk
# Git Smart Commit — 智慧拆分提交
將目前所有 staged / unstaged 變更,依功能邏輯分群後,逐批 `git add` + `git commit`。
---
## When NOT to Use
- 只有單一檔案、單一目的且預期只需要 1 個 commit。
- 目前在 merge/rebase 衝突中,尚未完成衝突解決。
- 使用者要求「只生成一筆 commit」或「僅提供訊息模板」。
---
## 流程 — SSOT: `rules/execution-policy.md` owns commit/review safety; this skill owns grouping evidence
### 1. 檢查變更狀態
執行以下指令取得完整變更清單:
```bash
git status --short
```
若沒有任何變更,告知使用者「目前沒有需要提交的變更」後結束。
接著取得所有變更的 diff 內容(用來判斷分群邏輯):
```bash
git diff
git diff --cached
```
---
### 2. 分析並分群
根據以下維度,將檔案變更分成多個 **commit 群組**,每組代表一個獨立的邏輯單元:
#### 分群依據(優先順序)
| 優先級 | 維度 | 範例(依專案實際路徑調整) |
|--------|------|------|
| 1 | **專案設定 / 核心與 AI 規則** | 依套件管理檔(`composer.json` / `package.json` / `pyproject.toml` 等)、框架設定目錄、`.gitignore`、`CLAUDE.md`、`AGENTS.md`、根目錄 `*.md` |
| 2 | **資料表異動 (Migration)** | 專案的 migrations 目錄 |
| 3 | **領域邏輯 (Domain / Infra)** | DDD 風格時的 `domain/*` 與 `infrastructure/*`;其他架構則依專案分層 |
| 4 | **MVC 架構 (Controller/Model)** | 框架對應的 controllers / models / views 路徑 |
| 5 | **核心工具 / 共用元件** | 專案自有共用元件或內部基礎庫 |
| 6 | **前端 / Legacy JS bundle** | 主要 JS bundle(`js/*` 等)、`css/*` |
| 7 | **自動化測試** | 專案測試目錄(`tests/*` 等) |
| 8 | **文件 / 規格 (OpenSpec)** | `docs/*`、`openspec/*` |
#### 分群規則
- **領域模型與基礎設施**:同步修改的 `Domain` 與對應的 `Infrastructure` 實作應視為同一組(完整業務邏輯)。
- **MVC 功能**:同一個 Feature 的 `Controller` + `Model` + `View` 可歸為同一組。
- **資料庫遷移**:`Migration` 檔案應盡量獨立成一個 commit,方便追蹤資料庫 Schema 變更。
- **測試**:若修改某個功能,連帶修改其 `tests/*` 內的測試,應合併在同一個 commit 中。
- **其他微小變更**:若某一組只有 1 個檔案且改動極小(< 5