Commit
Commit 是別人在一年後、壓力下、事故期間會讀到的最小歷史單位。請為那位讀者最佳化。
工作流程
- 提交前先查看:
git status、git diff --staged、git diff。切勿盲目提交。 - 檢查任何不得上線的內容:憑證、
.env檔案、私鑰、大型二進位檔、除錯用的 print 敘述、註解掉的程式碼。若發現,請停止並告知使用者。請參閱secrets-hygiene技能。 - 有策略地暫存。偏好使用
git add <paths>而非git add -A。每次提交一個邏輯變更;如果 diff 混雜了重構和功能,請將其拆分。 - 依下方格式撰寫訊息。
- 使用 heredoc 提交,讓多行主體能順利通過 shell:
git commit -m "$(cat <<'MSG'
feat(auth): add OIDC login for the admin console
Replaces the shared basic-auth password with Cognito-backed OIDC so
access can be revoked per user. Sessions expire after 8h.
Refs: PLAT-412
MSG
)"
- 使用
git log -1 --stat確認。除非使用者明確要求,否則絕對不進行修改或強制推送。
訊息格式
<類型>(<範圍>): <祈使句摘要,≤72 字元,結尾無句號>
<此變更存在的原因,而非 diff 顯示的內容 — diff 已經顯示了後者>
<頁尾:Refs/Closes 票證、BREAKING CHANGE: ...、Co-Authored-By>
類型:feat、fix、refactor、perf、test、docs、build、ci、chore、revert。
範圍是受影響的模組、服務或堆疊(api、terraform/vpc、ci)。若變更是全域性的,則省略範圍。
主體比摘要更重要。用兩到四個句子回答「為什麼現在做?」以及「我們考慮過什麼?」。對於微不足道的變更,一行提交是可以接受的。
範例
輸入:修復了 S3 儲存桶沒有標籤時的空指標
輸出:fix(s3-inventory): handle buckets with no tag set
輸入:將 terraform aws provider 從 5.40 升級到 5.60,新的 lambda runtime 屬性需要此版本 輸出:
build(terraform): bump aws provider to 5.60
Required for `aws_lambda_function.runtime = "python3.13"`. No resource
diffs on `terraform plan` across all stacks.
當提供 $ARGUMENTS 時
將其視為使用者提供的範圍或摘要提示,但仍需檢查 diff,若提示與實際變更不符則予以修正。