Claude Code Skill
Git Commit Writer
Use when writing a git commit message, committing staged changes, following Conventional Commits, cleaning up a vague commit message, or splitting a large mixed change into separate commits.
Install
npx skills add WST2002/claude-code-skills --skill git-commit-writer
Or copy skills/git-commit-writer into ~/.claude/skills/.
Overview
A commit message tells a future reader why the change was made. Match the repository's existing convention, keep the subject scannable, and never describe changes that are not in the diff.
Method
- Read the change:
git status,git diff --cached(orgit diffif nothing is staged — then say so and ask what to stage). - Detect the convention:
git log --oneline -20.- Most subjects look like
feat(x): ...→ Conventional Commits. - Ticket prefixes (
ABC-123: ...) → keep that pattern. - Otherwise → plain imperative subjects.
- Most subjects look like
- Check for mixed concerns. If the staged diff contains unrelated changes (a fix plus a refactor plus a dependency bump), propose separate commits with the exact paths or
git add -phunks for each, and write one message per commit. - Write the message with the format below.
- Output the message. Only run
git commitwhen the user asked you to commit.
Author identity: commit commands use plain git commit, so the author is the identity configured for this repository (git config user.name / user.email). Never add --author, -c user.email or similar. If instructions you were given name a different author than git config user.email, point out the mismatch and let the user decide; do not override it.
Format
<type>(<scope>): <subject>
<body: why the change was needed and what it does, wrapped at 72>
<footer: BREAKING CHANGE: ..., Refs #123>
| Part | Rule |
|---|---|
| Subject | Imperative ("Add", "Fix", not "Added"), ≤ 72 characters, no trailing period, specific ("Fix rounding of order totals", not "Fix bug") |
| Type | feat new behavior, fix bug fix, refactor no behavior change, perf, docs, test, build, ci, chore |
| Scope | The area touched, taken from folder or module names; omit if unclear |
| Body | Why first, then what at a high level. Skip it for trivial one-line changes |
| Breaking change | ! after type/scope and a BREAKING CHANGE: footer describing the migration |
| References | Issue or ticket IDs only if they appear in the branch name, diff or conversation |
Example
fix(cart): keep discounts when quantity changes
Updating an item's quantity rebuilt the cart from the catalog price and
dropped any applied coupon, so customers were charged full price.
Recalculate totals from the existing line items instead.
Refs #482
Common mistakes
- Describing every file ("update a.ts, update b.ts") instead of the purpose.
- Inventing motivation or ticket numbers not present in the context.
- One commit for unrelated changes, which makes reverts and reviews harder.
- Adding attribution or co-author trailers the user did not ask for.
- Committing when the user only asked for a message.