When working with Git, it’s common to make local changes that you later want to undo — whether it’s fixing a mistake, discarding a draft, or simply starting fresh. Thankfully, Git provides powerful tools to revert or reset your local changes safely.
In this blog post, we’ll explore how to revert different types of local changes in Git, step by step.
🎯 Understanding Local Changes
Before diving into the commands, let’s break down the types of changes you might want to undo:
Change Type | Description |
---|---|
Unstaged changes | Edited files not yet added with git add |
Staged changes | Files added to the staging area via git add |
Committed changes (local) | Changes already committed but not yet pushed |
Let’s look at how to undo each of these.
🔄 1. Discard Unstaged Changes
To discard changes made to a tracked file (not yet added to staging):
git checkout -- filename
Or, to discard all unstaged changes:
git restore .
💡 Tip: Use
git status
first to see what’s been modified.
✅ 2. Unstage Changes (But Keep File Edits)
If you added a file to staging (git add filename
) but want to remove it from the staging area:
git reset filename
To unstage all staged files:
git reset
This keeps your edits — it only removes them from the staging area.
🔁 3. Revert Changes in a File to the Last Commit
If you want to discard all changes (staged + unstaged) and revert a file back to the latest commit:
git restore filename
To reset all files:
git restore --source=HEAD --staged --worktree .
🧨 4. Undo the Most Recent Commit (Local Only)
If you’ve committed but not pushed, you can undo the last commit while keeping the changes:
git reset --soft HEAD~1
Or, remove the commit and the changes:
git reset --hard HEAD~1
⚠️ Warning:
--hard
deletes changes permanently. Use with caution!
🧹 Bonus: Clean Untracked Files
To delete untracked files (those not added to Git yet):
git clean -f
To remove untracked directories too:
git clean -fd
🧭 Summary
Task | Command |
---|---|
Discard unstaged changes | git restore . or git checkout -- file |
Unstage changes | git reset |
Revert staged & unstaged to last commit | git restore --source=HEAD --staged --worktree . |
Undo last commit (keep changes) | git reset --soft HEAD~1 |
Undo last commit (remove changes) | git reset --hard HEAD~1 |
Remove untracked files | git clean -f |
🚀 Final Thoughts
Reverting local changes in Git is a core skill that helps you code more confidently. Whether you’re cleaning up before a commit or correcting a mistake, Git gives you the flexibility to control your codebase at every stage.
📌 Pro tip: Always double-check with
git status
and consider creating a backup branch before running destructive commands likereset --hard
orclean
.