Git Amend Skill
Purpose: Safely amend the most recent commit with proper verification checks.
Safety Rules
Only Amend When ALL Conditions Are Met
- •HEAD commit was created by you in this session
- •Commit has NOT been pushed to remote
- •You intend to modify HEAD (not an earlier commit)
bash
# Check if pushed: git status # Look for: "Your branch is ahead of 'origin/main' by X commits" # "up to date" = already pushed (amending creates divergent history)
Quick Workflow
bash
# 1. Verify HEAD is the commit you want to amend git log --oneline -1 # 2. Verify not pushed to remote git status # Must show "ahead of origin" # 3. Make your changes (edit files, stage new files) git add <files> # 4. Amend the commit git commit --amend # Or with new message: git commit --amend -m "New message" # Or keep same message: git commit --amend --no-edit
Common Use Cases
Fix a typo in the last commit
bash
# Edit the file vim file.txt # Stage and amend git add file.txt git commit --amend --no-edit
Add forgotten file to last commit
bash
git add forgotten-file.txt git commit --amend --no-edit
Change commit message only
bash
git commit --amend -m "Better commit message"
Dangerous Situations
bash
# Only amend unpushed commits git push origin main git commit --amend # Creates divergent history! # Only amend your own commits git pull # Pulls teammate's commit git commit --amend # Rewrites their work! # If you must amend after push (with explicit permission): git commit --amend git push --force-with-lease # Safer than --force
Amending Earlier Commits
To modify a commit that's NOT at HEAD, use interactive rebase:
bash
# 1. Start interactive rebase git rebase -i <commit>^ # Parent of commit to edit # 2. Change 'pick' to 'edit' for the target commit # 3. Make changes when rebase stops git add <files> git commit --amend # 4. Continue rebase git rebase --continue
Error Recovery
bash
# If amend was wrong, check reflog for original:
git reflog
git reset --hard HEAD@{1} # Go back to before amend
Success Criteria
- • Verified HEAD is the commit to amend
- • Verified commit not pushed to remote
- • Changes staged before amend
- • Commit message is appropriate
- • No force push required (unless explicitly intended)