How to Undo Last Git Commit

Git, a robust and widely adopted version control system, plays a pivotal role in software development. It empowers developers to track modifications, revert to previous versions, and collaborate seamlessly. However, even seasoned developers can occasionally commit unintended changes. This comprehensive guide will explain how to undo your last Git commit.

Understanding Git Commit

Before we explore how to undo a Git commit, it’s crucial to comprehend what a commit in Git signifies. A commit represents a snapshot of your work at a specific moment. It encapsulates all the modifications you’ve made since the last commit. Each commit is uniquely identified by a SHA-1 hash, enabling Git to maintain a history of changes.

Reversing a Git Commit

There are two primary techniques to reverse a Git commit: git reset and git revert. We will discuss each method in detail, including their use cases and implications.

git reset --soft HEAD~1

Using git reset

The git reset command is a potent tool that allows you to move or “reset” your current HEAD to a specified state. Here’s how to use it to undo your last commit:

git reset --soft HEAD~1

In this command, --soft ensures that your changes are preserved in the staging area, and HEAD~1 refers to the commit before the current one. The changes from the undone commit will remain in your working directory and the staging area.

Here’s an example output:

Unstaged changes after reset:
M    file1.txt
M    file2.txt

This indicates that the changes in file1.txt and file2.txt are now unstaged.

If you wish to completely discard the commit and all associated changes, you can use the --hard option:

git reset --hard HEAD~1

Exercise caution with this command, as it permanently discards all changes from the last commit.

Utilizing git revert

The git revert command creates a new commit that undoes the changes made in a previous commit. This is a safe way to undo changes, as it doesn’t alter the existing commit history. Here’s how you can use it:

git revert HEAD

This command will create a new commit that undoes the changes made in the last commit.

Here’s an example output:

[master 0a9b2aa] Revert "Add new feature"
 1 file changed, 1 insertion(+), 2 deletions(-)

This indicates that a new commit has been created that reverts the changes from the previous commit.

Undoing a Git Commit: Expanded Examples

Using git reset: More Examples

Resetting to a Specific Commit

If you want to undo not just the last commit but several commits, you can do so by specifying the commit hash instead of HEAD~1. For example:

git reset --soft 9fceb02

This command will move the HEAD to the commit specified by the hash 9fceb02, and the changes from all commits after 9fceb02 will be kept in the staging area.

Resetting Unstaged Changes

If you have made changes but haven’t committed them yet, and you want to undo these changes, you can use git reset without any commit reference:

git reset --hard

This command will undo all unstaged changes, reverting your working directory to the state of the last commit.

Using git revert: More Examples

Reverting a Range of Commits

If you want to undo a range of commits, you can do so by specifying the range when using the git revert command. For example:

git revert HEAD~3..HEAD

This command will create new commits that undo the changes made in the last three commits.

Reverting a Specific Commit

If you want to undo a specific commit that’s not the most recent one, you can do so by specifying the commit hash:

git revert 9fceb02

This command will create a new commit that undoes the changes made in the commit specified by the hash 9fceb02.


Git is a powerful tool, but its complexity can be daunting for beginners. However, with a clear understanding of how to undo a commit, you can navigate Git with confidence. Whether you choose to use git reset or git revert depends on your specific needs and the implications of each command. Remember, the key to mastering Git is practice and exploration. Happy coding!

Categories Git

Your Mastodon Instance
Share to...