Commit work
Goal
Make commits that are easy to review and safe to ship:
-
only intended changes are included
-
commits are logically scoped (split when needed)
-
commit messages describe what changed and why
Inputs to ask for (if missing)
-
Single commit or multiple commits? (If unsure: default to multiple small commits when there are unrelated changes.)
-
Commit style: Conventional Commits are required.
-
Any rules: max subject length, required scopes.
Workflow (checklist)
-
Inspect the working tree before staging
-
git status
-
git diff (unstaged)
-
If many changes: git diff --stat
-
Decide commit boundaries (split if needed)
-
Split by: feature vs refactor, backend vs frontend, formatting vs logic, tests vs prod code, dependency bumps vs behavior changes.
-
If changes are mixed in one file, plan to use patch staging.
-
Stage only what belongs in the next commit
-
Prefer patch staging for mixed changes: git add -p
-
To unstage a hunk/file: git restore --staged -p or git restore --staged <path>
-
Review what will actually be committed
-
git diff --cached
-
Sanity checks:
-
no secrets or tokens
-
no accidental debug logging
-
no unrelated formatting churn
-
Describe the staged change in 1-2 sentences (before writing the message)
-
"What changed?" + "Why?"
-
If you cannot describe it cleanly, the commit is probably too big or mixed; go back to step 2.
-
Write the commit message
-
Use Conventional Commits (required):
-
type(scope): short summary
-
blank line
-
body (what/why, not implementation diary)
-
footer (BREAKING CHANGE) if needed
-
Prefer an editor for multi-line messages: git commit -v
-
Use references/commit-message-template.md if helpful.
-
Run the smallest relevant verification
-
Run the repo's fastest meaningful check (unit tests, lint, or build) before moving on.
-
Repeat for the next commit until the working tree is clean
Deliverable
Provide:
-
the final commit message(s)
-
a short summary per commit (what/why)
-
the commands used to stage/review (at minimum: git diff --cached , plus any tests run)