How to Undo Pushed Commits with Git
Tags: git, github, tutorial, beginners
Published: 2022-04-05 15:54:00

## Introduction

One major benefit of version control is that you can roll back your code to any time in history without significantly disrupting your teammates. However, reverting your code isn’t always straightforward, especially when you’re still learning Git or gaining confidence navigating the command line. In this post, I will walk you through undoing a commit after you push your changes via the terminal.

_Please note that this post's target audience includes students, early-career developers, or folks who have less experience reverting commits. Please refrain from adding discouraging comments critiquing those less experienced with version control. As software engineers, we have to remember that easy is relative, and there is a steep learning curve in tech. Some people may even have several years of experience, but still feel uncertain about reverting commits._

To follow along, you should already have:


* A GitHub account - If you don’t have one, you can find the [signup instructions here](https://docs.github.com/en/get-started/onboarding/getting-started-with-your-github-account)
* Git installed on your computer - You can find the instructions to [install Git here](https://github.com/git-guides/install-git).
* [Created a GitHub repository ](https://docs.github.com/en/get-started/quickstart/create-a-repo)


### Understanding what a commit is

A commit is a snapshot of your repository. Running the command `git commit` saves a version of the codebase at that point in time. Imagine this: Git takes a “picture” of your codebase with information stating, “This is what your codebase looked like on January 12, 2022 at 3:55 pm. @blackgirlbytes fixed a typo in the codebase at this time.” It’s suggested to make frequent, small commits to:

* Easily roll back small portions of your code if you make a mistake
* Enable you (and others) to understand the evolution of the codebase

## Undoing a commit after you push

Let’s recreate a situation where you need to undo a commit after you push.


### Setup



* In your repository, create a new file called index.md in our repository.

    

![This image is a screenshot of a repository that contains a file named index.md](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kmr58mr8738uwnsko1nt.png)

* Let’s commit and push some changes to our repository. I added a few arbitrary changes for the sake of the tutorial. In the image below, I added the words “hey, there” on line 1 of our index.md. Then I ran the following commands to add, commit, and push the changes.

    
```
git add index.md
git commit -m "added a greeting"
git push
```



![This image contains a screenshot of an IDE containing a file named index.html with the words "hey, there".](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ox8i4qkcqxqgzvzjzg6p.png)


### Reverting a commit

* But, let’s say I realized I didn’t want to commit or push the words “hey, there” to my repository. Perhaps, I just added that for testing purposes, or I’m missing another line that I wanted to include in the commit. Let’s figure out how to undo the commit:
    
**Look at the list of commits you made in this repository by running the command:**
    
    git log -p


![A screenshot containing a log of all my commits](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l2xkq5x8b08s7safkhdu.png)
 

From the image, we can see that we made two commits. The most recent commit indicates that we added the words “hey, there” on line 1. The oldest commit indicates that we created an index.md file. Each commit has a commit hash (the long alphanumeric unique string preceded by the word commit), a unique identifier for the attached commit.

		

**To undo the most recent commit, we can copy the commit hash and run the command:**


    git revert [commit hash]

In my case, I will run 

    git revert 0a3dbc774ea29bfd68fe55caf1ade33dba1bda35

#### Other options


- A shorter method is to run the command `git revert 0a3d`. Git is smart enough to identify the commit based on the first four (or more) characters.
- You don’t have to use the commit hash to identify the commit you want to revert. You can use any value that is considered a gitrevision, including the:
    - Tag
    - Branch
    - Hash 
    - Reference

_You can learn more about [git revisions here](http://dionisev.com/2016/03/git-revisions) or on the [git scm documentation](https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection?msclkid=0ffe2e3fb4f311ecb90dafbdc221e5e8)._


* You may see a message similar to the image below. This is called a COMMIT_EDITMSG; it holds a commit message of a commit in progress. It includes information about the commit that you’re reverting, including the author, the branch, the file, and the message. The goal for you is to review it and close the commit editor.

* If this file opens in your IDE, you can just close the file at the top. If you’re seeing this message in your terminal via Vim, you can use the command `:wq`

_Learn more about exiting this mode in this [Stackoverflow answer](https://stackoverflow.com/questions/13239368/git-how-to-close-commit-editor)._


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xh9rl2sn16bw0icq6139.png)

Now that you’ve exited the terminal, you can finalize the process by running the command `git push`. After running this command, you’ve successfully reverted your commit. 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1kru1s35f8s1qwquc2zc.png)

You can double-check that you reverted the commit by viewing the repo's commit history on GitHub.com. The image below reflects an accurate commit log highlighting the moments I: 

* Created the index.md file
* Added a greeting
* Reverted the commit

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/50gytfb4inkdxo8zqo0w.png)

**Thank you to [Nathan](https://twitter.com/nathanktruong) for reviewing and providing valuable feedback on this post.**  ❤️

_If this post helped you understand reverting commits, follow [GitHub](https://dev.to/github) and [me](https://dev.to/blackgirlbytes) on DEV!_