4.0 KiB
4.0 KiB
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-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鎖定的錯誤,當指令提示詞正常啟動後,可以忽略這個錯誤 - 遇到其他任何錯誤時立即停止,回報錯誤訊息給使用者