# Git Commit

> Create well-structured git commits with conventional commit messages. Use when asked to commit changes, prepare a commit, or stage and push code.

- Skill: `agulli/git-commit` (Agent Skill)
- Install (CLI): `npx skillmds@latest add agulli/git-commit`
- Raw SKILL.md: https://api.skillmd.com/api/skills/agulli/git-commit/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: agulli (https://skillmd.com/u/agulli)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/agulli/git-commit

---


## Process

1. **Run `git status`** to see all changed files. Read the output carefully.
2. **Run `git diff --stat`** to understand the scope of the change.
3. **Group related changes.** If the diff contains unrelated changes (e.g., a bug fix AND a new feature), create separate commits. Do not bundle unrelated work.
4. **Stage files intentionally.** Use `git add <specific-files>`, never `git add .` unless every changed file belongs in the same logical commit.
5. **Write the commit message** using Conventional Commits format:
   ```
   <type>(<scope>): <description>

   <body — explain WHY, not WHAT>

   <footer — references, breaking changes>
   ```
   Types: `feat`, `fix`, `refactor`, `docs`, `test`, `chore`, `perf`, `ci`
6. **Verify before committing.** Run `git diff --cached` to review exactly what will be committed. Read the staged diff.
7. **Commit.** Run `git commit -m "..."` with the message.

## Rationalizations

| Excuse | Rebuttal |
|--------|----------|
| "I'll just use `git add .` to save time" | Staging everything blindly leads to committing debug files, env vars, and unrelated changes. Stage intentionally. |
| "The message 'fix stuff' is fine for now" | Every commit message is permanent history. Write it properly the first time. |
| "I'll squash these later" | You won't. Write clean commits now. |

## Verification

- [ ] `git diff --cached` output was reviewed before committing
- [ ] Commit message follows Conventional Commits format
- [ ] No unrelated changes were bundled into a single commit
- [ ] No `.env`, `__pycache__`, or build artifacts were staged

