Community程式設計與開發github.com

提交衛生

保持提交數量精簡,訊息簡短。請在提交前、推送前、修復過程中提交堆積時,或提交檢查鉤子發出警告時使用。

提交衛生 是什麼?

這個技能「提交衛生」旨在協助開發者維護乾淨、易讀的 Git 提交歷史。它的核心原則是:每次變更僅包含邏輯上必要的提交,審查者只需閱讀一個乾淨的提交即可理解變更,而非一堆嘗試的歷史紀錄。此技能適用於 Claude Code、Cursor、Codex 等開發環境與編輯器。它提供明確的指引:提交訊息的主旨不超過 72 字且使用祈使語氣、內文不超過 5 行;確保每個提交只對應一個邏輯變更(功能片斷、修復或重構);在推送前使用 `git commit --fixup` 與自動壓縮(autosquash)將修正性提交壓縮;並要求註解簡短,僅在必要時撰寫。技能還包含常見合理化藉口的對照表、危險信號(如出現「wip」「fix」「oops」等提交)、驗證清單,以及已知限制(如 `git -C <dir> commit` 或 `-F <file>` 的訊息無法被鉤子檢查)。透過遵循此流程,團隊能維持整潔、易於審查的提交歷史,提升協作效率。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jksim/agent-skills-jksim/tree/HEAD/skills/commit-hygiene

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

提交衛生 是做什麼的?

概述

Jarrett 規則第 4 條:一項變更只包含它邏輯上需要的提交。審查者閱讀的是每個變更的一個乾淨提交,而不是一連串的嘗試紀錄。註解要簡短。

commit-check 鉤子會在 git commit 訊息超出限制時發出警告。它不會阻擋操作,你需要自行修正該提交。

使用時機

  • 每次提交前。
  • 每次推送前。
  • 當你為了修復一個問題而做了多個提交時。
  • 當 commit-check 鉤子發出警告時。

流程

1. 撰寫訊息

  • 主旨:72 個字元或更少。使用祈使語氣:「Add rules hook」(新增規則鉤子),而非「Added rules hook」(已新增規則鉤子)。
  • 內文:5 行或更少。若主旨已足夠,則可省略內文。
  • 說明變更了什麼以及原因。不要逐一描述每個檔案。
  • 使用簡化英語。請參閱 simplified-english 技能。

2. 每個邏輯變更製作一個提交

  • 一個邏輯變更:審查者可以接受或拒絕的一個功能片斷、一個修復或一個重構,視為一個單位。
  • 不要在一個提交中混合重構與行為變更。
  • 不要提交每一次嘗試。請在變更成功且測試通過時才提交。

3. 在推送前壓縮修正性提交

修正性提交用於修正同一變更中較早的提交。例如:「fix typo」(修正拼寫錯誤)、「wip」(進行中)、「address review」(處理審查意見)。

  1. 使用 git commit --fixup <sha> 建立修正性提交。
  2. 不開啟編輯器進行壓縮:GIT_SEQUENCE_EDITOR=: git rebase -i --autosquash <base>。
  3. 如果 rebase 因衝突而停止,請修正檔案並執行 git add <files>。然後執行 GIT_EDITOR=true git rebase --continue。若要停止,請執行 git rebase --abort。
  4. 再次執行測試。
  5. 檢查結果:git log --oneline <base>..HEAD。

若最後一個提交即為需要修正的目標,請使用 git commit --amend --no-edit。

警告:請勿改寫已存在於共用分支上的提交。先詢問使用者。改寫會強迫每位團隊成員重設。

4. 保持註解簡短

  • 僅在程式碼不明確時才撰寫註解。
  • 一行通常就足夠。說明原因,而非說明什麼。
  • 不要在註解中記錄變更歷史。Git 會保留歷史。

常見合理化藉口

合理化藉口現實
「小提交展現我的進度。」審查者需要的是結果,而非過程。請壓縮那些嘗試。
「長訊息提供更多上下文。」長訊息不會被閱讀。請將上下文放在規格說明或 PR 中。
「我之後再壓縮。」「之後」就是推送之後。請在推送前壓縮。
「鉤子只是警告,所以限制是可選的。」限制是團隊規則。鉤子發出警告是為了讓你修正。

危險信號

  • 推送前 git log 顯示「wip」、「fix」、「oops」或「try again」。
  • 一個錯誤修正有多個提交。
  • 提交內文列出每個被變更的檔案。
  • 註解重複說明程式碼已表達的內容。

驗證

  • 每個主旨都在 72 個字元或更少,且使用祈使語氣。
  • 每個內文都在 5 行或更少。
  • git log --oneline <base>..HEAD 顯示每個邏輯變只有一個提交。
  • 推送前沒有遺留修正性提交。
  • 任何 rebase 後測試皆通過。

已知限制:鉤子不會檢查 git -C <dir> commit 或 git -c <key>=<value> commit。它也會跳過某些無法讀取的訊息,例如 -F <file>。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相關技能