Just use this command in your terminal:

git reset --soft HEAD~1 

NOTES:
--soft keeps your changes staged (ready to commit again).
HEAD~1 means “the last commit.” and HEAD~2 means the commit before the last one

🌐
GitHub
github.com › orgs › community › discussions › 183621
undo the last commit · community · Discussion #183621
January 6, 2026 - Something went wrong. There was an error while loading. Please reload this page. ... You can use git reset with the --soft or --mixed option to undo the last commit while keeping your changes.
Discussions

version control - How do I undo the most recent local commits in Git? - Stack Overflow
On SourceTree (GUI for GitHub), you may right-click the commit and do a 'Reverse Commit'. This should undo your changes. ... git reset --soft HEAD^ # Use --soft if you want to keep your changes. git reset --hard HEAD^ # Use --hard if you don't care about keeping your changes. ... Save this answer. ... Show activity on this post. ... It works great to undo the last ... More on stackoverflow.com
🌐 stackoverflow.com
Revert commit on Website
You can also do git reset --hard ... would revert to your last commit). After that, do push again as specified before. You can also do soft instead of hard. Soft keeps changes after that commit you reset to, so you can make modifications, but you are now at the commit you ... More on github.com
🌐 github.com
8
18
4 Ways to Undo a Git Commit - Amend vs Reset
what about rebasing to edit, squash, fix up, drop, or reorder commits interactively? More on reddit.com
🌐 r/opensource
3
8
January 12, 2023
How to undo last push but keep pending changes in VS Code?

Ok, the answer is to go to Source Control > click the "..." > Undo Last Commitand it'll be just like before the erroneous push

More on reddit.com
🌐 r/git
3
2
July 7, 2020
People also ask

How to Undo, Revert, or Delete a Git Commit
To undo the last local commit (one that hasn't been pushed yet) while keeping your changes staged, run git reset --soft HEAD~1. To unstage the changes but keep the edits in your working directory, use git reset --mixed HEAD~1. To discard the changes entirely, use git reset --hard HEAD~1 — this permanently deletes the uncommitted work. To undo a specific older commit without altering history, use git revert , which creates a new commit that applies the reverse of the targeted commit's changes; this is the safest approach for shared branches. The --no-commit flag stages the reverting changes wit
🌐
git-tower.com
git-tower.com › learn › git faq › how to undo, revert, or delete a git commit
How to Undo, Revert, or Delete a Git Commit | Learn Version Control ...
What happens if I encounter conflicts while reverting a commit?
Resolve the conflicts manually, stage the changes, and then run `git revert --continue` to complete the revert operation.
🌐
blog.openreplay.com
blog.openreplay.com › openreplay blog › undoing git commits after push: safely revert changes on remote repositories
Undoing Git Commits After Push: Safely Revert Changes on Remote ...
🌐
GitHub
gist.github.com › wilsonsilva › c6f870e6423a1c0076224d1f1e468dbb
Undo last commit but keep changes - Gist - GitHub
Undo last commit but keep changes. GitHub Gist: instantly share code, notes, and snippets.
🌐
Git Tower
git-tower.com › learn › git faq › how to undo, revert, or delete a git commit
How to Undo, Revert, or Delete a Git Commit | Learn Version Control with Git
When you want to undo your last local commit — one that hasn't been pushed to a remote yet — git reset is the right tool: ... This rewinds the branch pointer by one commit. The --soft flag preserves your changes as staged modifications, ...
Published   1 day ago
🌐
KodeKloud
kodekloud.com › blog › git-uncommit-last-commit
How to Uncommit Last commit in Git (5 Scenarios)
November 25, 2025 - You want to undo your commit, but you don’t want to lose your changes or your staging. What do you do? The answer is simple: use the git reset --soft HEAD~1 command. This command will undo your last commit, but it will keep your changes and ...
Top answer
1 of 16
30140

Undo a commit & redo

$ git commit -m "Something terribly misguided" # (0: Your Accident)
$ git reset HEAD~                              # (1)
# === If you just want to undo the commit, stop here! ===
[ edit files as necessary ]                    # (2)
$ git add .                                    # (3)
$ git commit -c ORIG_HEAD                      # (4)
  1. git reset is the command responsible for the undo. It will undo your last commit while leaving your working tree (the state of your files on disk) untouched. You'll need to add them again before you can commit them again.
  2. Make corrections to working tree files.
  3. git add anything that you want to include in your new commit.
  4. Commit the changes, reusing the old commit message. reset copied the old head to .git/ORIG_HEAD; commit with -c ORIG_HEAD will open an editor, which initially contains the log message from the old commit and allows you to edit it. If you do not need to edit the message, you could use the -C option.

Alternatively, to edit the previous commit (or just its commit message), commit --amend will add changes within the current index to the previous commit.

To remove (not revert) a commit that has been pushed to the server, rewriting history with git push origin main --force[-with-lease] is necessary. It's almost always a bad idea to use --force; prefer --force-with-lease instead, and as noted in the git manual:

You should understand the implications of rewriting history if you amend a commit that has already been published.


Further Reading

You can use git reflog to determine the SHA-1 for the commit to which you wish to revert. Once you have this value, use the sequence of commands as explained above.


HEAD~ is the same as HEAD~1. The article What is the HEAD in git? is helpful if you want to uncommit multiple commits.

2 of 16
13009

Undoing a commit is a little scary if you don't know how it works. But it's actually amazingly easy if you do understand. I'll show you the 4 different ways you can undo a commit.

Say you have this, where C is your HEAD and (F) is the state of your files.

   (F)
A-B-C
    ↑
  master

Option 1: git reset --hard

You want to destroy commit C and also throw away any uncommitted changes. You do this:

git reset --hard HEAD~1

The result is:

 (F)
A-B
  ↑
master

Now B is the HEAD. Because you used --hard, your files are reset to their state at commit B.

Option 2: git reset

Maybe commit C wasn't a disaster, but just a bit off. You want to undo the commit but keep your changes for a bit of editing before you do a better commit. Starting again from here, with C as your HEAD:

   (F)
A-B-C
    ↑
  master

Do this, leaving off the --hard:

git reset HEAD~1

In this case the result is:

   (F)
A-B-C
  ↑
master

In both cases, HEAD is just a pointer to the latest commit. When you do a git reset HEAD~1, you tell Git to move the HEAD pointer back one commit. But (unless you use --hard) you leave your files as they were. So now git status shows the changes you had checked into C. You haven't lost a thing!

Option 3: git reset --soft

For the lightest touch, you can even undo your commit but leave your files and your index:

git reset --soft HEAD~1

This not only leaves your files alone, it even leaves your index alone. When you do git status, you'll see that the same files are in the index as before. In fact, right after this command, you could do git commit and you'd be redoing the same commit you just had.

Option 4: you did git reset --hard and need to get that code back

One more thing: Suppose you destroy a commit as in the first example, but then discover you needed it after all? Tough luck, right?

Nope, there's still a way to get it back. Type this

git reflog

and you'll see a list of (partial) commit SHAs (that is, hashes) that you've moved around in. Find the commit you destroyed, and do this:

git checkout -b someNewBranchName shaYouDestroyed

You've now resurrected that commit. Commits don't actually get destroyed in Git for some 90 days, so you can usually go back and rescue one you didn't mean to get rid of.

Find elsewhere
🌐
Aviator
aviator.co › home › blog › how to git undo commit: methods and best practices
How to Git Undo Commit: Methods and Best Practices - Aviator Blog
February 10, 2025 - Git offers multiple ways to undo the last commit depending on what you want to do with the changes, such as keeping them, unstaging them, or discarding them. Let’s explore these methods with examples and use cases. This undoes the last commit but keeps all changes in the staging area, so ...
🌐
OpenReplay
blog.openreplay.com › openreplay blog › undoing git commits after push: safely revert changes on remote repositories
Undoing Git Commits After Push: Safely Revert Changes on Remote Repositories
November 30, 2024 - If you haven’t pushed your last commit yet and want to undo it, you have a few options: git reset --soft HEAD~1: This command moves the HEAD pointer back one commit, keeping the changes from the last commit staged. git reset --mixed HEAD~1 ...
🌐
GitHub
docs.github.com › en › desktop › managing-commits › undoing-a-commit-in-github-desktop
Undoing a commit in GitHub Desktop - GitHub Docs
For more information, see Amending a commit in GitHub Desktop. In the left sidebar, ensure you are on the Changes tab. At the bottom of the sidebar, click Undo.
🌐
codestudy
codestudy.net › blog › how-to-undo-the-last-commit-in-git-but-keep-my-changes-as-unstaged
How to Undo the Last Git Commit and Keep Changes Unstaged: A Step-by-Step Guide — codestudy.net
Use git status frequently: After undoing a commit, run git status to verify changes are unstaged and intact. Undoing the last Git commit and keeping changes unstaged is a common task, and git reset HEAD~1 is your go-to command.
🌐
GitHub
github.com › orgs › community › discussions › 60023
Revert commit on Website · community · Discussion #60023
You can also do git reset --hard HEAD~number, where number is how many commits you want to reset to (so HEAD~1 would revert to your last commit). After that, do push again as specified before.
🌐
GitHub
github.blog › home › open source › how to undo (almost) anything with git
How to undo (almost) anything with Git - The GitHub Blog
July 23, 2024 - Scenario: You just typo’d the last commit message, you did git commit -m "Fxies bug #42" but before git push you realized that really should say “Fixes bug #42”. Undo with: git commit --amend or git commit --amend -m "Fixes bug #42" What’s ...
🌐
Nobledesktop
blog.nobledesktop.com › learn › git › undo changes in git: git checkout, git revert, & git reset
Undo Changes in Git: checkout, revert, & reset
April 19, 2026 - For example, to undo the last 2 commits (assuming both have not been pushed) run Git reset—soft HEAD~2 · NOTE: Git reset—soft HEAD~ is the same as Git reset—soft HEAD^ which you may see in Git documentation.
🌐
Medium
medium.com › @sivaraaj › how-to-undo-the-most-recent-local-commits-in-git-7892fd717964
How to Undo the Most Recent Local Commits in Git ? | by Sivaraj Ramasamy | Medium
February 18, 2024 - Use it if you want to retain the changes but revise them before committing. For example, suppose you have committed a change to file1.txt with the message “Add new feature”. You can use git reset --soft HEAD~1 to undo the commit and keep ...
🌐
Redirect
sethrobertson.github.io › GitFixUm
On undoing, fixing, or removing commits in git
If you see this message, your browser is broken. Please click here
🌐
LabEx
labex.io › tutorials › git-how-to-undo-git-commit-but-keep-changes-392512
How to Undo Git Commit But Keep Changes | LabEx
After running this command, the ... commit but keep the changes in your working directory, you can use the git reset command with the --soft option:...
🌐
GitKraken
gitkraken.com › home › learn › problems & solutions › undo git commit
Undo Git Commit | How do you undo your last Git commit?
August 5, 2022 - If you want to undo your last Git commit but keep the changes, a soft Git reset will do the trick. Using the --soft flag will ensure that the changes in undone revisions are preserved.
🌐
DataCamp
datacamp.com › blog › git-undo-last-commit
Git Undo Last Commit: Step-by-Step Guide for Beginners | DataCamp
June 23, 2025 - Use --mixed when you want to keep your file changes but remove them from the staging area. It’s helpful for making edits before re-committing. Yes, especially in a team environment. It rewrites commit history on the remote branch and can erase teammates’ work if not used carefully. git ...
🌐
Reddit
reddit.com › r/opensource › 4 ways to undo a git commit - amend vs reset
r/opensource on Reddit: 4 Ways to Undo a Git Commit - Amend vs Reset
January 12, 2023 -

Maintainers will be more than happy if you keep the git history clean :D

I'm quite sure all of these happened to you at least once:

  • You committed a change with the wrong message (typo, wrong tense, etc.)

  • You committed a change with the wrong files (something missing, too many files, etc.)

  • You committed a change too early (feature isn't complete yet)

  • You committed a change you didn't want to (wrong code, just needs to be deleted)

Sure, you can just add a new commit, but in the long run, this will mess up your git history (unless you're closing PRs with squash).

If you want to keep your history clean and make your mistake disappear, let me show you 4 different ways to undo a commit. They're similar but not exactly the same, so you can apply the best one for your situation.

Bonus content: I'll also show you how to restore hard-deleted changes. What does that mean? I'll get into that later.

As usual, there's a live demo waiting for you on my YouTube channel where I show you all the content of this article plus some extra words and scenarios. If you're just here for the commands, you can skip the video and go straight to the article.

--> Click here for the video <--

Table of Contents

    1. Amend no-edit

  • 2. Amend & Change Message

  • 3. Reset (soft)

  • 4. Reset (hard)

  • Bonus: Restore Hard Deleted Changes

1. Amend no-edit

Let's start with the easiest situation, you already did a commit but you forgot to add some files.

Instead of creating an extra commit on top, you can run git commit --amend --no-edit. As a result, the last commit will be updated with the new files.

git add .
git commit --amend --no-edit

No extra actions required, you're done!

2. Amend & Change Message

Similar situation to the previous one, but you also want to change the commit message.

git add .
git commit --amend

This will open your default editor and you can change the commit message. Once you're done, save and close the editor. The commit will be updated with the new message.

Actually, git add . is not required if all you wanted to do is to change the commit message. You can just run git commit --amend.

3. Reset (soft)

This is the case where you want to undo a commit, but you want to keep the changes so that you can make a new commit at a later time.

git reset is kind of a time travel, really powerful but also dangerous. The most common use case is probably to undo a commit but keep in mind that you can do much more.

The full command we need is git reset --soft HEAD~1.

  • --soft means that the changes will be kept.

  • HEAD means the current commit you're on.

  • HEAD~1 means the last commit, but you can also use HEAD~2 to undo the last 2 commits.

  • A shortcut for HEAD is @, so @~1 would be the same as HEAD~1.

After running this command, you'll see that the last commit is gone but the files still have your changes applied.

You can now keep working and whenever you're ready you can do a new commit.

4. Reset (hard)

This is the case where you want to undo a commit and you don't want to keep the changes.

If you want to delete the changes, you need to add the --hard flag while running git reset.

Warning: this will also delete any uncommitted changes you have.

The full command we need this time is git reset --hard HEAD~1 and it will delete the last commit and the changes. Forever. Or is it?

Bonus: Restore Hard Deleted Changes

If you run git reset --hard HEAD~1 and you're not happy with the result, you can still restore the changes.

As we've just seen, git reset is our time travel machine, but we need to tell it where to go. In this case we entirely removed a commit and there's no trace in the git history, so we cannot say HEAD~number anymore.

Luckily, git keeps a log of all the commits that have been removed. You can see this log by running git reflog.

You want to look at a log like this one:

1b2c3d4 HEAD@{0}: reset: moving to HEAD~1

This means that you were at commit 1b2c3d4 and you did a reset to the previous commit. You can now use this commit ID to restore the changes.

git reset --hard 1b2c3d4

What are we doing here? We're telling git to go back to the commit 1b2c3d4 and to get rid of all the changes we did (in this case, the change was deleting the commit). Undoing a delete operation actually means restoring the deleted commit.

Conclusion

I hope you found this article useful and learned something new. If you have any questions or suggestions, feel free to leave a comment below.

I know there are at least a dozen different ways of moving around in git. I selected these 4 for simplicity but if you want to expand and add more in the comment section, let's do it!

Let me recommend once more to also watch the live demo on YouTube and leave a like to support my work.

Thanks!

🌐
GitHub
docs.github.com › en › desktop › managing-commits › resetting-to-a-commit-in-github-desktop
Resetting to a commit in GitHub Desktop - GitHub Docs
... If you made a series of commits and want to fix a mistake you made prior to the most recent commit, you can use "reset to commit" in GitHub Desktop to reset the changes in those commits.