To undo the most recent local commits in Git, use one of the following methods based on your goal:
1. Undo the Last Commit and Keep Changes (Unstage Files)
git reset HEAD~1
# Or equivalently:
git reset --mixed HEAD~1
- What it does:
- Removes the last commit from history.
- Changes are preserved in your working directory (unstaged).
- Use case: You want to rework the commit (e.g., split or amend it).
2. Undo the Last Commit and Keep Changes Staged
git reset --soft HEAD~1
- What it does:
- Removes the last commit.
- Changes remain staged (ready to recommit).
- Use case: You want to re-commit the same changes with adjustments.
3. Completely Remove the Last Commit (Discard Changes)
git reset --hard HEAD~1
- What it does:
- Deletes the last commit and all its changes permanently.
- Use case: You want to discard the commit entirely (irreversible!).
4. Undo a Commit by Creating a New Reverting Commit
git revert HEAD
- What it does:
- Creates a new commit that reverses the changes from the last commit.
- Preserves the original commit history (safe for shared branches).
- Use case: You want to undo a commit that’s already been pushed to a remote repository.
Examples
Undo the last 2 commits and keep changes unstaged:
git reset HEAD~2
Undo the last commit and discard changes:
git reset --hard HEAD~1
Revert the last commit (creates a new undo commit):
git revert HEAD
Key Notes
git reset
alters history (use only for local commits).git revert
is safer for shared/public commits (preserves history).- Recovering lost commits: Use
git reflog
if you accidentally reset a commit.
When to Use Which
Goal | Command |
---|---|
Rework the last commit | git reset --soft HEAD~1 |
Unstage changes from the last commit | git reset HEAD~1 |
Permanently discard the last commit | git reset --hard HEAD~1 |
Safely undo a pushed commit | git revert HEAD |
By choosing the right method, you can undo commits safely and effectively!