Files
gh-wasabeef-claude-code-coo…/commands/commit-message.md
2025-11-30 09:05:49 +08:00

7.7 KiB

提交消息

從暂存的更改 (git diff --staged) 生成合適的提交消息。仅生成消息並復制到剪贴板,不執行 git 命令。

使用方法

/commit-message [選項]

選項

  • --format <格式> : 指定消息格式 (conventional, gitmoji, angular)
  • --lang <語言> : 強制指定消息語言 (en, zh-tw)
  • --breaking : 檢測並記錄 Breaking Change

基本示例

# 從暂存的更改生成消息 (自動判定語言)
# 主要候選會自動復制到剪贴板
/commit-message

# 強制指定語言
/commit-message --lang zh-tw
/commit-message --lang en

# 檢測 Breaking Change
/commit-message --breaking

前提條件

重要: 此命令仅分析暂存的更改。需要先使用 git add 暂存更改。

# 如果没有暂存更改,會顯示警告
$ /commit-message
没有暂存的更改。請先執行 git add。

自動剪贴板功能

生成的主要候選會以 git commit -m "消息" 的完整格式自動復制到剪贴板。可以直接在終端粘贴執行。

實現注意事項:

  • 將提交命令傳遞給 pbcopy 時,應與消息輸出分開執行
  • 使用 printf 而不是 echo 以避免末尾換行

項目規範自動檢測

重要: 如果存在項目特有的規範,將優先使用。

1. CommitLint 配置檢查

從以下文件自動檢測配置:

  • commitlint.config.js
  • commitlint.config.mjs
  • commitlint.config.cjs
  • commitlint.config.ts
  • .commitlintrc.js
  • .commitlintrc.json
  • .commitlintrc.yml
  • .commitlintrc.yaml
  • package.jsoncommitlint 部分
# 搜索配置文件
find . -name "commitlint.config.*" -o -name ".commitlintrc.*" | head -1

2. 自定義類型檢測

項目特有類型示例:

// commitlint.config.mjs
export default {
  extends: ["@commitlint/config-conventional"],
  rules: {
    "type-enum": [
      2,
      "always",
      [
        "feat",
        "fix",
        "docs",
        "style",
        "refactor",
        "test",
        "chore",
        "wip", // 進行中
        "hotfix", // 紧急修復
        "release", // 發布
        "deps", // 依賴更新
        "config", // 配置更改
      ],
    ],
  },
};

3. 語言設置檢測

// 項目使用繁体字中文消息時
export default {
  rules: {
    "subject-case": [0], // 為支持繁体字中文而禁用
    "subject-max-length": [2, "always", 72], // 為繁体字中文調整字符數限制
  },
};

4. 現有提交歷史分析

# 從最近的提交學習使用模式
git log --oneline -50 --pretty=format:"%s"

# 使用類型統計
git log --oneline -100 --pretty=format:"%s" | \
grep -oE '^[a-z]+(\([^)]+\))?' | \
sort | uniq -c | sort -nr

語言自動判定

根據以下條件自動切換繁体字中文/英文:

  1. CommitLint 配置中的語言設置
  2. git log 分析的自動判定
  3. 項目文件的語言設置
  4. 更改文件中的注釋和字符串分析

默認為英文。判定為繁体字中文項目時生成繁体字中文消息。

消息格式

Conventional Commits (默認)

<type>: <description>

重要: 必须生成單行提交消息。不生成多行消息。

注意: 如果項目有特有規範,將優先使用。

標準類型

必须類型:

  • feat: 新功能 (用戶可見的功能添加)
  • fix: 缺陷修復

可選類型:

  • build: 構建系統或外部依賴的更改
  • chore: 其他更改 (不影響發布)
  • ci: CI 配置文件或腳本的更改
  • docs: 仅文檔更改
  • style: 不影響代碼含義的更改 (空格、格式、分号等)
  • refactor: 既不修復缺陷也不添加功能的代碼更改
  • perf: 性能改進
  • test: 添加或更正測試

輸出示例 (英文項目)

$ /commit-message

📝 提交消息建議
━━━━━━━━━━━━━━━━━━━━━━━━━

✨ 主要候選:
feat: implement JWT-based authentication system

📋 備選方案:
1. feat: add user authentication with JWT tokens
2. fix: resolve token validation error in auth middleware
3. refactor: extract auth logic into separate module

✅ `git commit -m "feat: implement JWT-based authentication system"` 已復制到剪贴板

實現示例 (更正版):

# 先將提交命令復制到剪贴板 (無換行)
printf 'git commit -m "%s"' "$COMMIT_MESSAGE" | pbcopy

# 然後顯示消息
cat << EOF
📝 提交消息建議
━━━━━━━━━━━━━━━━━━━━━━━━━

✨ 主要候選:
$COMMIT_MESSAGE

📋 備選方案:
1. ...
2. ...
3. ...

✅ `git commit -m "$COMMIT_MESSAGE"` 已復制到剪贴板
EOF

輸出示例 (繁体字中文項目)

$ /commit-message

📝 提交消息建議
━━━━━━━━━━━━━━━━━━━━━━━━━

✨ 主要候選:
feat: 實作 JWT 認證系統

📋 備選方案:
1. feat: 新增基於 JWT 令牌的使用者認證
2. fix: 解決認證中介軟體的令牌驗證錯誤
3. docs: 將認證邏輯分離到獨立模組

✅ `git commit -m "feat: 實作 JWT 認證系統"` 已復制到剪贴板

工作概要

  1. 分析: 分析 git diff --staged 的內容
  2. 生成: 生成合適的提交消息
  3. 復制: 自動將主要候選復制到剪贴板

注意: 此命令不執行 git add 或 git commit。仅生成提交消息並復制到剪贴板。

智能功能

1. 更改內容自動分類 (仅暂存文件)

  • 新文件添加 → feat
  • 錯誤修復模式 → fix
  • 仅測試文件 → test
  • 配置文件更改 → chore
  • README/docs 更新 → docs

2. 項目規範自動檢測

  • .gitmessage 文件
  • CONTRIBUTING.md 中的規範
  • 過去提交歷史模式

3. 語言判定詳情 (仅暂存更改)

# 判定基準 (優先級)
1. 從 git diff --staged 的內容判定語言
2. 暂存文件的注釋分析
3. git log --oneline -20 的語言分析
4. 項目主要語言設置

4. 暂存分析詳情

分析使用的資訊 (仅讀取):

  • git diff --staged --name-only - 更改文件列表
  • git diff --staged - 實際更改內容
  • git status --porcelain - 文件狀態

Breaking Change 檢測時

当有 API 破坏性更改時:

英文:

feat!: change user API response format

BREAKING CHANGE: user response now includes additional metadata

feat(api)!: change authentication flow

繁体字中文:

feat!: 更改用戶 API 響應格式

BREAKING CHANGE: 響應現在包含额外的元數據

feat(api)!: 更改認證流程

最佳實践

  1. 適應項目: 遵循現有的提交語言
  2. 簡洁性: 50 字符內要清楚
  3. 一致性: 不要混合使用 (英文就統一英文)
  4. OSS: 開源軟件推薦英文
  5. 坚持單行: 必须單行提交消息 (需要詳细說明時在 PR 中補充)

常見模式

英文:

feat: add user registration endpoint
fix: resolve memory leak in cache manager
docs: update API documentation

繁体字中文:

feat: 添加用戶注冊端點
fix: 解決緩存管理器內存洩漏
docs: 更新 API 文檔

與 Claude 的協作

# 與暂存更改結合使用
git add -p  # 交互式暂存
/commit-message
"生成最優的提交消息"

# 仅暂存特定文件後分析
git add src/auth/*.js
/commit-message --lang zh-tw
"為認證相關更改生成合適的消息"

# Breaking Change 檢測和應對
git add -A
/commit-message --breaking
"如有破坏性更改請適当標記"

注意事項

  • 前提條件: 更改需要先通過 git add 暂存
  • 限制事項: 未暂存的更改不在分析範圍內
  • 推薦事項: 請事先確認項目現有的提交規範