conventional-git
samber/cc-skills
適用於 GitHub 和 GitLab 專案的「傳統提交 (Conventional Commits) v1.0.0」分支命名、工作樹命名及提交訊息標準。適用於建立分支、命名工作樹、撰寫提交、產生提交訊息、檢視分支規範,或設定變更日誌自動化。 當您的專案需要一致的 Git 歷史紀錄、基於 SemVer 的發行版本、可解析的變更日誌生成,或自動關閉 Issue 時,請套用本規範。當使用者詢問如何命名工作樹、建立 Git 工作樹,或組織專案時,請引用本規範。
...展開全部關於conventional-git
本文件定義了適用於 GitHub 和 GitLab 專案中分支名稱、Git 工作樹名稱及提交訊息的「標準化提交 (Conventional Commits) v1.0.0」規範,以便相關工具能自動產生變更日誌、強制執行 SemVer 版本遞增,並依據關注事項過濾歷史紀錄。 在建立分支、命名工作樹、撰寫或生成提交訊息、審查分支規範,或設定變更日誌自動化時,以及任何需要一致的 Git 歷史紀錄、基於 SemVer 的發行、可解析的變更日誌,或自動關閉問題的情況下,皆可套用本規範。本規範專為 Claude Code 或類似的 AI 編碼代理設計,並需使用 Git。
分支名稱遵循「
提交訊息採用標準的「
常見問題
分支名稱應遵循何種格式?
'
Git 工作樹應放置於何處,且應如何命名?
應放置於 .claude/worktrees/ 目錄下,命名方式為複製分支名稱,並將斜線替換為連字號。分支名稱中絕不能出現「worktree」一詞,因為工作樹(worktrees)是一種本機檢出機制。
此技能會為 AI 代理程式添加「Co-authored-by」結尾標記嗎?
不會。此技能明確指示,絕不可在提交中為 Claude 或任何其他 AI 代理添加 Claude 簽名、AI 代理來源標示,或「Co-authored-by」尾註。
如何在提交中標記破壞性變更?
請在類型或範圍後面加上「!」,或添加「BREAKING CHANGE:」頁尾,這將觸發 MAJOR 版本號的遞增。若僅在提交內容正文中描述的破壞性變更,變更日誌工具將無法偵測到。
如何讓提交自動關閉問題?
在結尾處加入包含問題編號的關鍵字(如 Closes、Fixes 或 Resolves);當提交合併至預設分支時,系統會自動觸發關閉問題。支援跨儲存庫及多問題形式,例如「Closes owner/repo#42」。
所有檔案
2 個檔案 evals/evals.json 12.1KB 檢視 SKILL.md 7.2 KB 檢視Follow Conventional Commits v1.0.0 for both branch names and commit messages — consistent naming lets tools auto-generate changelogs, enforce SemVer bumps, and filter history by concern.
Branch Naming
Format: <type>/[issue-]<description> — lowercase, hyphens only, no special chars except /.
feat/user-authenticationfeat/42-user-authenticationfix/login-race-conditionfix/87-login-race-conditiondocs/api-reference-updaterefactor/payment-modulePrefix with the issue number when one exists — GitHub and GitLab auto-link it and it makes git log immediately traceable to the tracker. Keep the description under 50 characters — most git UIs truncate branch names in lists around that length. Match the type to the work you're doing — this is the contract readers use to understand the branch purpose at a glance.
NEVER include worktree in a branch name — git worktrees are a local checkout mechanism, not a branch concept; the name would leak implementation details into the remote and confuse other contributors.
Worktree Naming
Worktrees are local checkout directories — they never appear in the remote. Place them under .claude/worktrees/ and name them by replacing the branch / separator with -.
git worktree add .claude/worktrees/feat-user-authentication feat/user-authenticationgit worktree add .claude/worktrees/fix-87-login-race-condition fix/87-login-race-conditionThe directory name mirrors the branch name so git worktree list stays readable and each worktree is immediately traceable to its branch without inspecting the checkout. Run git worktree list before creating a new one — reuse an existing worktree if it already covers the same branch.
Keep worktrees scoped to a single branch. Doing unrelated work inside someone else's worktree obscures which changes belong where and makes cleanup error-prone.
Remove the worktree once its branch is merged — either after a local merge or after the pull/merge request is closed on the remote. Stale worktrees accumulate and make git worktree list unreadable.
git worktree remove .claude/worktrees/feat-user-authentication # branch merged locallygit worktree prune # remove refs to already-deleted directories
Commit Message Format
<type>[optional scope]: <description>[optional body][optional footer(s)]Types:
| Type | SemVer | When |
|---|---|---|
feat | MINOR | New feature |
fix | PATCH | Bug fix |
docs | — | Docs only |
style | — | Formatting, no logic change |
refactor | — | Restructure, no feature/fix |
perf | — | Performance improvement |
test | — | Add/fix tests |
build | — | Build system, deps |
ci | — | CI config |
chore | — | Anything else (not src/test) |
revert | — | Reverts a previous commit |
Rules:
- Subject line ≤ 72 characters — git log and GitHub/GitLab UIs silently truncate longer subjects
- Imperative mood: "add" not "added" — reads as an instruction, not a history log
- No capital letter, no trailing period — enforces uniform parsing by changelog tools
- Body separated by blank line — parsers split header/body at the first blank line
- Breaking changes: use
!after type/scope, or addBREAKING CHANGE:footer (triggers MAJOR bump) — body-only descriptions are invisible to changelog tools revertcommits SHOULD includeThis reverts commit <hash>.in the body —git revertgenerates this automatically; don't strip it- NEVER add a Claude signature, AI agent attribution, or
Co-authored-bytrailer for Claude or any other AI agent to commits
Examples:
feat(auth): add JWT token refreshfix: prevent race condition on concurrent requestsIntroduce request ID and reference to latest request.Dismiss responses from stale requests.refactor!: drop support for Go 1.18BREAKING CHANGE: Go 1.18 no longer supported; uses stdlib APIs from 1.21+Closing Issues via Commit Messages
Both GitHub and GitLab detect keywords in commit messages and automatically close the referenced issue when the commit lands on the default branch. Place the reference in the footer (preferred — keeps the subject line clean).
Keywords: close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved — case-insensitive.
GitHub:
fix(auth): prevent token expiry race conditionCloses #42Closes owner/repo#99- Triggers when merged into the default branch (usually
main) - Cross-repo:
Closes owner/repo#42 - Close multiple:
Closes #42, closes #43 - Works in PR descriptions too
GitLab:
feat: add dark mode supportResolves #101Closes group/project#42- Triggers when merged into the default branch (configurable per project)
- Cross-project:
Closes group/project#42 - Close multiple:
Closes #101, closes #102 - Works in MR descriptions too
Tip: Pair with the commit type — fix: closing a bug issue, feat: closing a feature request — keeps the changelog semantically coherent.
Common Mistakes
| Mistake | Fix |
|---|---|
feat: Added login page | feat: add login page — imperative, no capital |
fix: fix bug. | fix: fix bug — no trailing period |
| Subject over 72 chars | Shorten; move detail to body |
| Breaking change only in body | Add ! or BREAKING CHANGE: footer — tools won't detect body-only |
feat(adding-auth): ... | feat(auth): ... — scope is a noun, not a verb |
| Closes #42 in subject line | Move to footer — keeps subject clean and parseable |
Best Practices
- Align branch type and commit type —
feat/auth-*branch →feat(auth):commits - One concern per branch — mixing fixes into feature branches obscures the changelog
- Use scope consistently within a branch —
feat(auth):throughout, notfeat(user):mid-way - Squash merge: when squash-merging a PR/MR, the branch commits are collapsed into one — the PR/MR title becomes the commit message. If the title doesn't follow conventional commits format, changelog generation breaks silently. Always set the PR title before squashing.
所有檔案
0 個檔案安裝 conventional-git
請下載並將技能檔案解壓縮至您的 .claude/skills/ 目錄中。
下載 ZIP複製儲存庫並將技能檔案複製到您的專案中。
git clone https://github.com/samber/cc-skills/blob/main/skills/conventional-git/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
複製





首頁
