git-undo-wizard

Recover from any Git mistake safely.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "git-undo-wizard" with this command: npx skills add latestaiagents/agent-skills/latestaiagents-agent-skills-git-undo-wizard

Git Undo Wizard

Recover from any Git mistake safely.

When to Use

  • Accidentally committed to wrong branch

  • Need to undo a commit (before or after push)

  • Accidentally deleted a branch or file

  • Need to recover lost commits

  • Want to undo a merge

  • Committed sensitive data by mistake

Quick Reference

Situation Command

Undo last commit, keep changes git reset --soft HEAD~1

Undo last commit, discard changes git reset --hard HEAD~1

Undo changes to a file git checkout -- <file>

Undo staged changes git reset HEAD <file>

Undo a pushed commit git revert <commit>

Recover deleted branch git reflog

  • git checkout -b <branch> <sha>

Scenarios & Solutions

  1. Undo Last Commit (Not Pushed)

Keep the changes (just uncommit):

git reset --soft HEAD~1

Changes are now staged, ready to recommit

Unstage the changes too:

git reset HEAD~1

Changes are in working directory, not staged

Discard everything (dangerous):

git reset --hard HEAD~1

Changes are gone forever

  1. Undo Last Commit (Already Pushed)

Safe way (creates a new "undo" commit):

git revert HEAD git push

This creates a new commit that undoes the previous one

If you MUST rewrite history (only on your own branch):

git reset --hard HEAD~1 git push --force-with-lease

Never do this on shared branches!

  1. Committed to Wrong Branch

Move commit to correct branch:

Note the commit hash

git log -1 # Copy the hash

Go to correct branch

git checkout correct-branch

Cherry-pick the commit

git cherry-pick <commit-hash>

Go back and remove from wrong branch

git checkout wrong-branch git reset --hard HEAD~1

  1. Undo Changes to a File

Discard unstaged changes:

git checkout -- <filename>

Or in newer Git:

git restore <filename>

Unstage a file (keep changes):

git reset HEAD <filename>

Or in newer Git:

git restore --staged <filename>

Restore file to specific commit:

git checkout <commit-hash> -- <filename>

  1. Recover Deleted Branch

Find the last commit of deleted branch

git reflog

Look for entries like "checkout: moving from deleted-branch to main"

Note the SHA before deletion

Recreate the branch

git checkout -b recovered-branch <sha>

  1. Recover Lost Commits

Git reflog shows ALL recent HEAD movements

git reflog

Find your lost commit

Example output:

abc1234 HEAD@{0}: reset: moving to HEAD~3

def5678 HEAD@{1}: commit: Important work <-- This one!

Recover it

git checkout -b recovery-branch def5678

Or cherry-pick it

git cherry-pick def5678

  1. Undo a Merge

If not pushed:

git reset --hard HEAD~1

Or to specific commit before merge:

git reset --hard <commit-before-merge>

If already pushed:

git revert -m 1 <merge-commit-hash> git push

  1. Committed Sensitive Data

If not pushed:

Remove from last commit

git reset --soft HEAD~1

Remove sensitive file

git rm --cached <sensitive-file>

Add to .gitignore

echo "sensitive-file" >> .gitignore

Recommit

git add . git commit -m "Remove sensitive data"

If already pushed (requires rewriting history):

Use git-filter-repo (install first)

git filter-repo --path <sensitive-file> --invert-paths

Force push all branches (coordinate with team!)

git push --force --all

  1. Undo Staged Changes

Unstage everything

git reset

Unstage specific file

git reset HEAD <file>

Keep file staged but undo modifications

git checkout HEAD -- <file>

  1. Completely Start Over

Discard ALL local changes and commits

git fetch origin git reset --hard origin/main

Or clean untracked files too

git clean -fd

The Reflog Safety Net

Git reflog is your time machine. It tracks every HEAD movement for ~90 days.

See recent history

git reflog

See with timestamps

git reflog --date=relative

Recover ANY previous state

git reset --hard HEAD@{5} # Go back 5 operations

Best Practices

Before dangerous operations:

git stash # Save work in progress

or

git branch backup-branch # Create safety branch

Use --force-with-lease instead of --force :

git push --force-with-lease # Fails if remote changed

Check before reset:

git log --oneline -10 # See what you're about to affect

Common Mistakes to Avoid

  • Using --force on shared branches

  • Running reset --hard without checking git stash list

  • Forgetting that reflog is local only

  • Not making a backup branch before risky operations

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

graphrag-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

agentic-rag

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

production-rag-checklist

No summary provided by upstream source.

Repository SourceNeeds Review