Git Incremental Commits
Goal
Turn all uncommitted changes into a sequence of small, clear Conventional Commits, stopping when git status is clean.
Workflow
- •Run
git status -sbto see whether there is anything to commit. Stop if clean. - •Run
git branch --show-current(orgit rev-parse --abbrev-ref HEAD) to confirm the current branch. - •Branch safety gate:
- •If the current branch is
mainormasterand there are new changes to commit, do not commit. - •Ask the user to create a new branch first (example:
git switch -c <branch-name>), then re-rungit status -sband continue. - •If in a detached HEAD state (no branch), ask the user to create a branch before committing.
- •If the current branch is
- •Run
git diff --stat(andgit diffas needed) to understand scope. - •Identify logical groups: dependencies, config, feature code, tests, docs, refactors, fixes.
- •Commit in smallest safe slices:
- •Prefer single-purpose commits.
- •Use
git add -pto stage hunks when files mix concerns. - •Use whole-file staging when the file is cohesive.
- •After each commit, re-check
git status -sband repeat. - •Stop only when the working tree is clean and no untracked files remain (unless explicitly told to leave them).
Grouping Heuristics
- •Dependencies: If package manifests change (e.g.,
package.json), commit them with their lockfiles in the same commit. - •Config/Build: Commit build or CI config separately (e.g.,
tsconfig,eslint, CI files). - •Feature work: Prefer one commit per feature slice.
- •Fixes: Keep bug fixes isolated from refactors when possible.
- •Tests: Pair tests with the change they validate, unless tests are a separate logical unit.
- •Docs: Keep docs-only changes separate.
Conventional Commit Rules
- •Use
type(scope): subjectortype: subject. - •Keep subject short, imperative, and specific.
- •Suggested types:
feat,fix,chore,refactor,docs,test,build,ci. - •Dependency changes: prefer
build(deps): add <pkg>orchore(deps): bump <pkg>.
Safety Checks
- •Do not include unrelated changes in the same commit.
- •If a file mixes unrelated edits and hunk-splitting is ambiguous, ask before proceeding.
- •If there are generated files or large diffs, confirm intent before committing.
- •Avoid committing directly to
main/master; create a working branch first.
Command Pattern
- •Inspect:
git status -sb,git diff --stat,git diff. - •Stage:
git add -porgit add <file>. - •Commit:
git commit -m "type(scope): subject". - •Repeat until clean.