Git Commit with Bullet-List Body
Make commits that are easy to review and safe to ship: only intended changes are included, commits are logically scoped (split when needed), and commit messages describe what changed and why. The message body must be written as a bullet list, not a paragraph.
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, then blank line, then body as a bullet list (what/why, not implementation diary). Footer (e.g. BREAKING CHANGE) if needed.
- Subject: One line, imperative, ~50 chars or less.
- Body: Blank line after subject, then only bullet lines; one bullet per logical change; what and why, not file names. No paragraph prose in the body.
- Prefer an editor for multi-line messages:
git commit -v.
Run lint, format, and verification before committing
- Run the project's format command (e.g.
npm run format, prettier --write, ruff format, cargo fmt) so staged code matches project style.
- Run the project's lint command (e.g.
npm run lint, ruff check, eslint, cargo clippy) and fix any issues.
- Then run the smallest relevant verification (unit tests or build) before moving on.
Repeat for the next commit until the working tree is clean.
Message format
type(scope): short summary
- Bullet one: what changed and why
- Bullet two: another logical change
- Bullet three: optional detail
- Subject: One line, Conventional Commits (e.g.
feat(auth):, fix(api):).
- Body: Blank line after subject, then only bullet lines. No paragraph prose in the body.
- Do not add a
Co-authored-by: Cursor <...> (or similar) trailer to the commit message.
Body bullets: good vs bad
Good (intent, one idea per bullet):
- Add login endpoint and validate JWT in middleware
- Extend task model with priority field and migration
- Fix date formatting in report export
Bad (file names or vague):
- Changed
src/auth.py
- Updated stuff in models
Infer intent from the diff and phrase each bullet as a single, clear change.
Committing
- Editor:
git commit or git commit -v, then paste subject + blank line + bullets.
- CLI:
git commit -m "Subject line" -m "- Bullet one\n- Bullet two\n- Bullet three" or a single -m with the full message if the shell preserves newlines.
Checklist
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)
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: git-commit-bullets3description: Perform git commit with the message body written as a bullet list. Use when committing with git and the user wants bullet-list commit bodies. Use when this capability is needed.4---56# Git Commit with Bullet-List Body78Make commits that are easy to review and safe to ship: only intended changes are included, commits are logically scoped (split when needed), and commit messages describe what changed and why. The **message body** must be written as a **bullet list**, not a paragraph.910---1112## Inputs to ask for (if missing)1314- Single commit or multiple commits? (If unsure: default to multiple small commits when there are unrelated changes.)15- Commit style: Conventional Commits are required.16- Any rules: max subject length, required scopes.1718---1920## Workflow (checklist)21221. **Inspect the working tree before staging**23 - `git status`24 - `git diff` (unstaged)25 - If many changes: `git diff --stat`26272. **Decide commit boundaries (split if needed)**28 - Split by: feature vs refactor, backend vs frontend, formatting vs logic, tests vs prod code, dependency bumps vs behavior changes.29 - If changes are mixed in one file, plan to use patch staging.30313. **Stage only what belongs in the next commit**32 - Prefer patch staging for mixed changes: `git add -p`33 - To unstage a hunk/file: `git restore --staged -p` or `git restore --staged <path>`34354. **Review what will actually be committed**36 - `git diff --cached`37 - Sanity checks: no secrets or tokens, no accidental debug logging, no unrelated formatting churn.38395. **Describe the staged change in 1-2 sentences (before writing the message)**40 - "What changed?" + "Why?"41 - If you cannot describe it cleanly, the commit is probably too big or mixed; go back to step 2.42436. **Write the commit message**44 - Use Conventional Commits (required): `type(scope): short summary`, then blank line, then **body as a bullet list** (what/why, not implementation diary). Footer (e.g. BREAKING CHANGE) if needed.45 - **Subject:** One line, imperative, ~50 chars or less.46 - **Body:** Blank line after subject, then **only** bullet lines; one bullet per logical change; what and why, not file names. No paragraph prose in the body.47 - Prefer an editor for multi-line messages: `git commit -v`.48497. **Run lint, format, and verification before committing**50 - Run the project's **format** command (e.g. `npm run format`, `prettier --write`, `ruff format`, `cargo fmt`) so staged code matches project style.51 - Run the project's **lint** command (e.g. `npm run lint`, `ruff check`, `eslint`, `cargo clippy`) and fix any issues.52 - Then run the smallest relevant verification (unit tests or build) before moving on.53548. **Repeat for the next commit** until the working tree is clean.5556---5758## Message format5960```61type(scope): short summary6263- Bullet one: what changed and why64- Bullet two: another logical change65- Bullet three: optional detail66```6768- **Subject:** One line, Conventional Commits (e.g. `feat(auth):`, `fix(api):`).69- **Body:** Blank line after subject, then only bullet lines. No paragraph prose in the body.70- **Do not** add a `Co-authored-by: Cursor <...>` (or similar) trailer to the commit message.7172---7374## Body bullets: good vs bad7576**Good (intent, one idea per bullet):**77- Add login endpoint and validate JWT in middleware78- Extend task model with priority field and migration79- Fix date formatting in report export8081**Bad (file names or vague):**82- Changed `src/auth.py`83- Updated stuff in models8485Infer intent from the diff and phrase each bullet as a single, clear change.8687---8889## Committing9091- **Editor:** `git commit` or `git commit -v`, then paste subject + blank line + bullets.92- **CLI:** `git commit -m "Subject line" -m "- Bullet one\n- Bullet two\n- Bullet three"` or a single `-m` with the full message if the shell preserves newlines.9394---9596## Checklist9798- [ ] Working tree inspected; commit boundaries decided99- [ ] Only intended changes staged; `git diff --cached` reviewed100- [ ] Change described in 1-2 sentences (what + why)101- [ ] Subject line: Conventional Commits, short, imperative102- [ ] Body is only a bullet list (no paragraph)103- [ ] Bullets describe intent, not just files104- [ ] Lint and format run (and any issues fixed); verification run; commit executed with the composed message105- [ ] No Co-authored-by Cursor trailer in the message106107---108109## Deliverable110111Provide:112- The final commit message(s)113- A short summary per commit (what/why)114- The commands used to stage/review (at minimum: `git diff --cached`, plus any tests run)115116---117> Converted and distributed by [TomeVault](https://tomevault.io/claim/bowentan) — claim your Tome and manage your conversions.118<!-- tomevault:4.0:skill_md:2026-04-13 -->