AgentSkillsCN

git-amend

强制要求:请勿再使用 `git commit --amend`——先验证 HEAD 状态与推送情况

SKILL.md
--- frontmatter
name: git-amend
description: "MANDATORY: Use instead of `git commit --amend` - verifies HEAD and push status first"

Git Amend Skill

Purpose: Safely amend the most recent commit with proper verification checks.

Safety Rules

Only Amend When ALL Conditions Are Met

  1. HEAD commit was created by you in this session
  2. Commit has NOT been pushed to remote
  3. 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)