Files
gh-mileschou-claude-marketp…/commands/commit-push.md
2025-11-30 08:40:29 +08:00

4.0 KiB
Raw Blame History

description, allowed-tools, model
description allowed-tools model
Commit and Push Bash(git add:*),Bash(git branch:*),Bash(git diff:*),Bash(git log:*),Bash(git reset:*),Bash(git push:*),Bash(git status:*),Bash(git symbolic-ref:*) claude-haiku-4-5

協助產生符合專案規範的提交訊息,並推送到遠端儲存庫。

工作目錄資訊

將所有檔案重新設定成追蹤清單:

!`git add -N .`

檔案變更與暫存狀態的清單:

!`git status --short`

檔案變更的詳細內容:

!`git diff`

最近五筆提交訊息:

!`git log --oneline -5`

分支資訊:

  • 遠端主要分支 !git symbolic-ref refs/remotes/origin/HEAD
  • 當前分支 !git branch --show-current

所有分支清單:

# 本地分支
!`git branch`

# 遠端分支
!`git branch -r`

流程

步驟 1分析工作目錄資訊

分析「工作目錄資訊」中收集到的變更狀態,使用一次 AskUserQuestion 工具同時確認:

  1. 要提交的檔案範圍(是否符合提交原子性)
  2. 目標推送分支

1-1. 檔案變更狀態

分析工作目錄的變更,判斷是否符合提交原子性:

符合原子性:所有變更都屬於同一個邏輯修改

  • 不使用 AskUserQuestion 詢問檔案範圍
  • 只詢問目標推送分支
  • 直接提交所有變更

違反原子性:包含多個不相關的修改

  • 依 Conventional Commits 類型分類檔案:

    • feat: 新功能
    • fix: 修復問題
    • docs: 文件更新
    • style: 程式碼格式調整
    • refactor: 重構
    • test: 測試
    • chore: 建置或輔助工具
  • 輸出分類後的預計 commit message 和前三個重要檔案:

    1. feat: [commit message]
       - [檔案路徑]
       - [檔案路徑]
       - [檔案路徑]
    2. docs: [commit message]
       - [檔案路徑]
    
  • 在 AskUserQuestion 中提供複選選項,讓使用者選擇要提交哪些分類

1-2. 分支狀態

在 AskUserQuestion 中提供分支選項:

  • 當前分支 - 在目前的分支上提交並推送
  • 其他可能的分支 - 根據修改內容推測相關的分支名稱

若使用者手動輸入的分支名稱不存在,則建立新分支。

注意:除非必要,否則不要提供「切換到新的分支」的選項

1-3. AskUserQuestion 範例

同時詢問檔案範圍和目標分支,例如:

問題 1:要提交哪些變更?

  • 選項:[feat: 新增登入功能] / [docs: 更新 README]

問題 2:要推送到哪個分支?

  • 選項:[當前分支: main] / [branch1] / [branch2]

IMPORTANT:在使用 AskUserQuestion 工具時,若使用者沒有回答或回答空白選項,則必須重新確認

步驟 2產生提交訊息

根據記憶中的提交訊息格式偏好產生提交訊息,若無特別指示則使用 Conventional Commits 規範:

基本格式

<type>(<scope>): <subject>

<body>
  • type: 提交類型feat, fix, docs, style, refactor, test, chore
  • scope: 影響範圍(選填)
  • subject: 簡短描述50 字以內)
  • body: 詳細說明(選填,使用 bullet points

範例

feat(auth): 新增登入驗證功能

- 實作 email 驗證邏輯
- 加入驗證碼過期檢查
- 更新相關單元測試

步驟 3執行提交與推送

3-1. 加入檔案

先重置暫存區:

git reset .

然後根據步驟 1 使用者選擇的檔案範圍,使用 git add 加入檔案。

3-2. 提交

使用步驟 2 產生的提交訊息執行 commit

git commit -m <提交訊息>

3-3. 推送

推送到使用者選擇的分支:

git push -u origin <分支名稱>

注意事項

提交原則

  • 每個提交應保持原子性,只包含相關的變更
  • 提交訊息應清楚描述變更內容和原因

錯誤處理

  • 執行指令偶爾會出現 .git/index.lock 鎖定的錯誤,當指令提示詞正常啟動後,可以忽略這個錯誤
  • 遇到其他任何錯誤時立即停止,回報錯誤訊息給使用者