How to Undo a Git Commit Locally: A Comprehensive Guide

How to Undo a Git Commit Locally: A Comprehensive Guide

Committing changes in Git is a vital part of the development process, but sometimes things don't go as planned. Don't fret! Undoing commits is a common task in Git and is a breeze to do.



In this article, we'll explore the process of undoing commits in a fun and lighthearted way. So grab a drink, sit back, and let's learn how to navigate the waters of Git commits gone wrong.



  • Undo the last commit
  • Undo a specific commit
  • Recover a lost commit
  • Conclusion



Advantages of Using TypeScript in Large-Scale React Development (2023)

6 Disadvantages of TypeScript over JavaScript

Using git reset to Undo last commit



The git reset command is used to reset the current branch to a previous commit, discarding commits and changes made after the specified commit. It has several options to control how the reset is performed:



1.git reset HEAD~



The HEAD~ reference points to the current branch tip. To reset the current branch to the previous commit, you use git reset HEAD~. This command discards the latest commit and changes made in the working tree, but keeps the changes in the staging area.

# Create a new commit git add . git commit -m "Newest commit" # Reset the current branch to the previous commit git reset HEAD~

2.git reset <commit hash>



You can also specify a specific commit to reset the current branch to by using the commit hash. To do this, you first use git log to view the commit history and get the hash of the commit you want to reset to. Then, use git reset <commit hash> to reset the current branch to the specified commit.



In Git, a commit hash is a unique identifier for each commit in a repository. The commit hash, also known as a "SHA" (Secure Hash Algorithm), is generated using a cryptographic hash function based on the contents of the commit, including its file changes, metadata, and commit message.

# Get the commit hash of the previous commit git log # Reset the current branch to the previous commit using the commit hash git reset <commit hash> # Example of commit hash e97f3b9f7b671879b8ac2429f0d2f1e5eafce04c git reset e97f3b9f7b671879b8ac2429f0d2f1e5eafce04c

3.git reset --soft HEAD~



The --soft option resets the current branch to the specified commit, keeping the changes in the working tree. This means the changes will still be present in the working tree, but the changes will not be staged and will not appear in the next commit.



4.git reset --hard HEAD~



The --hard option discards all changes and resets the current branch to the specified commit. This option discards all changes made in the working tree and the staging area, effectively erasing all changes made after the specified commit.





How to undo specific commit



To undo a specific commit in Git, you can use the git revert command. The git revert command creates a new commit that undoes the changes introduced in the specified commit.



Here's an example of how to undo a specific commit:

# Check the list of commits in the current branch git log # Identify the commit hash of the commit you want to undo # Revert the specified commit git revert <commit-hash> # Push the changes to the remote repository git push #or git push -f
The -f option in the git push command is used to force push the changes, as you are rewriting the branch history. Use this option with caution, as it can overwrite the remote branch and destroy other people's work.



Replace <commit-hash> with the actual commit hash of the commit you want to undo.



Alternatively, you can also use the git reset command with the --hard option to completely remove the specified commit from the branch history. However, be aware that this will permanently destroy the commit and its changes, so use with caution:

# Reset the current branch to the previous commit, discarding the specified commit and its changes git reset --hard <commit-hash>

Replace <commit-hash> with the actual commit hash of the commit you want to undo.

Recover a lost commit in Git



To recover a lost commit in Git, you can use the git reflog command. The git reflog command displays a list of all the reference updates in the local repository, including branch updates and resets. You can use this information to find the lost commit and recover it.



Here's an example of how to recover a lost commit:

# Display a list of all reference updates in the local repository git reflog # Identify the commit hash of the lost commit # Reset the current branch to the lost commit git reset --hard <commit-hash> # Push the changes to the remote repository git push -f

Replace <commit-hash> with the actual commit hash of the lost commit.



The -f option in the git push command is used to force push the changes, as you are rewriting the branch history. Use this option with caution, as it can overwrite the remote branch and destroy other people's work.

In conclusion, undoing commits, specific commits, and recovering lost commits are common tasks in Git. Git provides several powerful tools, such as git reset, git revert, and git reflog, to help you manage these tasks effectively.



When undoing the last commit, you can use the git reset command with the --soft or --hard option. The --soft option allows you to undo the commit but keep the changes in the staging area, while the --hard option discards the changes completely.



To undo a specific commit, you can use the git revert command, which creates a new commit that undoes the changes introduced in the specified commit.



In the case of a lost commit, you can use the git reflog command to find and recover the lost commit.



It's important to be careful when using these Git commands, especially when resetting or force pushing, as they can overwrite existing commits and permanently destroy work.



For further learning, you can check out the official Git documentation and online resources, such as online courses, tutorials, and forums, to gain a deeper understanding of Git and its advanced features.



See on Git :

Git Reset Docs

Git Commit Docs


Avatar image

By Mahady Manana, Fullstack Javascript Developer

08 February 2023 at 07 h 35

"Skills are honed through the interplay of learning and teaching - one must learn in order to teach, and teach in order to truly learn”. As a passionate Javascript developer, I enjoy sharing my knowledge and skills with others, and regularly publish tutorials on my website and other platforms about the latest Javascript, Typescript, Node.js, React.js, Next.js and more to help others learn and stay up to date with the latest developments trends.