Undoing the Last Commit in Git

Sometimes we make a commit that we wish to undo. In this article we learn how to undo changes in both local and pushed repository commits.

April 30, 20244 min read

When working with Git, sometimes you may need to undo changes you've committed. Whether you've made a mistake in your last commit or just need to modify what was submitted, Git offers powerful tools to safely revert those changes. In this tutorial, we'll explore how to undo the last commit using git reset, understand the differences between git reset --soft and git reset --hard, and learn how to revert a commit.

How to Undo the Last Commit with 'git reset'

To undo the last commit in Git, you can use the git reset command. This command is versatile and allows you to reset your current HEAD to a specified state. To simply undo the last commit while keeping all changes in your working directory, you can use:

git reset HEAD~1

This command moves the HEAD, which is the pointer to the current branch, back by one commit, effectively making it as though the last commit never happened. However, it leaves your working directory and the index (staging area) as they were before you run the reset, allowing you to re-commit the changes if needed.

Difference Between 'git reset --soft' and 'git reset --hard'

Understanding the difference between git reset --soft and git reset --hard is crucial when undoing changes in Git:

  • git reset --soft: This command is used when you want to keep all the changes in your working directory but reset the HEAD to a previous commit. For example, if you just want to undo the commit but not the changes you made, you can run:After running this command, the changes from the undone commit will remain in your staging area.
git reset --soft HEAD~1
  • git reset --hard: This command is the most drastic form of reset. It completely undoes the commit and discards all changes in your working directory and staging area to match the state of the HEAD commit. Use this with caution because it cannot be reversed:
git reset --hard HEAD~1

Try Kodaschool for free

Click below to sign up and get access to free web, android and iOs challenges.

Sign Up

How to Revert a Commit Instead of Resetting It

Sometimes, you might want to undo a commit but keep its record in the repository's history. This is useful in collaborative projects where transparency is important. In such cases, you can use git revert. Here’s how:

git revert HEAD

This command creates a new commit that undoes the changes made by the last commit. It is a safe way to undo changes that have already been pushed to a shared repository because it doesn't alter the project's history.

When to Use 'git rest'

  • Local Changes: Use git reset when you are working with changes that have not been pushed to a shared repository. git reset is ideal for local undo operations where the changes have not yet been seen by others. It allows you to remove one or more commits from the current branch.
  • Quick Fix before Pushing: If you notice a mistake in your last commit and want to fix or modify it before pushing it to a remote repository, git reset can be used to undo the last commit and re-commit the correct changes.
  • Cleaning Up Local History: Sometimes during development, you may want to clean up or consolidate your commit history before making it public. In such cases, git reset can help you shape your commit history before sharing it with others.

When to Use 'git revert'

  • Public Changes: Use git revert for changes that have already been pushed to a shared repository or when working in a collaborative environment. git revert is safer for undoing changes that other people might have already pulled, as it doesn't alter the existing commit history.
  • Maintaining History: If it’s important to maintain a record of all changes (e.g., for audit purposes or regulatory reasons), git revert should be used. It creates a new commit that reverses the effect of earlier commits but keeps the project’s history intact.
  • Avoiding Conflicts: In a team setting, using git revert avoids conflicts that can arise from using git reset on public commits. Since git reset can rewrite commit history, it can lead to significant problems when other team members have based their work on the commits that are later reset.
Myles Mburu

About Myles Mburu

Software Developer | AWS Solutions Architect