Agent-almanac commit-changes
git clone https://github.com/pjt222/agent-almanac
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/caveman/skills/commit-changes" ~/.claude/skills/pjt222-agent-almanac-commit-changes-e3a4de && rm -rf "$T"
i18n/caveman/skills/commit-changes/SKILL.mdCommit Changes
Stage files selective. Write clear commit messages. Verify commit history.
When Use
- Save logical unit of work to version control
- Create commit with descriptive, conventional message
- Amend most recent commit (message or content)
- Review what commit before commit
Inputs
- Required: One or more changed files to commit
- Optional: Commit message (drafted if not given)
- Optional: Whether amend previous commit
- Optional: Co-author attribution
Steps
Step 1: Review Current Changes
Check working tree status. Inspect diffs.
# See which files are modified, staged, or untracked git status # See unstaged changes git diff # See staged changes git diff --staged
Got: Clear picture of all modified, staged, untracked files.
If fail:
git status fail? Verify inside git repo (git rev-parse --is-inside-work-tree).
Step 2: Stage Files Selective
Stage specific files. Avoid
git add . or git add -A — may grab sensitive files or unrelated changes.
# Stage specific files by name git add src/feature.R tests/test-feature.R # Stage all changes in a specific directory git add src/ # Stage parts of a file interactively (not supported in non-interactive contexts) # git add -p filename
Review staged before commit.
git diff --staged
Got: Only intended files and changes staged. No
.env, credentials, large binaries.
If fail: Unstage accidental files with
git reset HEAD <file>. Sensitive data staged? Unstage now, before commit.
Step 3: Write Commit Message
Use conventional commits format. Always pass message via HEREDOC for proper formatting.
git commit -m "$(cat <<'EOF' feat: add weighted mean calculation Implements weighted_mean() with support for NA handling and zero-weight filtering. Includes input validation for mismatched vector lengths. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> EOF )"
Conventional commit types:
| Type | When use |
|---|---|
| New feature |
| Bug fix |
| Documentation only |
| Add or update tests |
| Code change — no fix, no new feature |
| Build, CI, dependency updates |
| Formatting, whitespace (no logic change) |
Got: Commit created with descriptive message. Explains why, not just what.
If fail: Pre-commit hook fail? Fix issue, re-stage with
git add, create new commit. No --amend — failed commit never created.
Step 4: Amend Last Commit (Optional)
Only amend if commit not pushed to shared remote.
# Amend message only git commit --amend -m "$(cat <<'EOF' fix: correct weighted mean edge case for empty vectors EOF )" # Amend with additional staged changes git add forgotten-file.R git commit --amend --no-edit
Got: Previous commit updated in-place.
git log -1 shows amended content.
If fail: Commit already pushed? No amend. Create new commit. Force-push amended commits to shared branches breaks history.
Step 5: Verify Commit
# View the last commit git log -1 --stat # View recent commit history git log --oneline -5 # Verify the commit content git show HEAD
Got: Commit appears in history with correct message, author, file changes.
If fail: Commit has wrong files? Use
git reset --soft HEAD~1 to undo commit, keep changes staged. Re-commit correct.
Checks
- Only intended files in commit
- No sensitive data (tokens, passwords,
files) committed.env - Commit message follows conventional commits format
- Message body explains why change made
-
shows commit with correct metadatagit log - Pre-commit hooks (if any) passed
Pitfalls
- Commit too much at once: Each commit = one logical change. Split unrelated changes into separate commits.
- Using
blind: Always reviewgit add .
first. Prefer stage specific files by name.git status - Amend pushed commits: Never amend commits pushed to shared branch. Rewrites history. Breaks collaborators.
- Vague commit messages: "fix bug" or "update" tells nothing. Describe what changed and why.
- Forget
on content amends: Adding forgotten files to last commit? Use--no-edit
— keeps existing message.--no-edit - Hook fail leading to
: Pre-commit hook fail → commit never created.--amend
would modify previous commit. Always create new commit after fix hook issues.--amend
See Also
- branch workflow before commitmanage-git-branches
- next step after commitcreate-pull-request
- handle conflicts during merge/rebaseresolve-git-conflicts
- repo setup and conventionsconfigure-git-repository