This depends a lot on what you mean by "revert".

Temporarily switch to a different commit

If you want to temporarily go back to it, fool around, then come back to where you are, all you have to do is check out the desired commit:

# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32

Or if you want to make commits while you're there, go ahead and make a new branch while you're at it:

git checkout -b old-state 0d1d7fc32

To go back to where you were, just check out the branch you were on again. (If you've made changes, as always when switching branches, you'll have to deal with them as appropriate. You could reset to throw them away; you could stash, checkout, stash pop to take them with you; you could commit them to a branch there if you want a branch there.)

Hard delete unpublished commits

If, on the other hand, you want to really get rid of everything you've done since then, there are two possibilities. One, if you haven't published any of these commits, simply reset:

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.

If you mess up, you've already thrown away your local changes, but you can at least get back to where you were before by resetting again.

Undo published commits with new commits

On the other hand, if you've published the work, you probably don't want to reset the branch, since that's effectively rewriting history. In that case, you could indeed revert the commits. In many enterprise organisations, the concept of "protected" branches will even prevent history from being rewritten on some major branches. In this case, reverting is your only option.

With Git, revert has a very specific meaning: create a commit with the reverse patch to cancel it out. This way you don't rewrite any history.

First figure out what commits to revert. Depending on the technique chosen below, you want to either revert only the merge commits, or only the non-merge commits.

# This lists all merge commits between 0d1d7fc and HEAD:
git log --merges --pretty=format:"%h" 0d1d7fc..HEAD | tr '\n' ' '

# This lists all non merge commits between 0d1d7fc and HEAD:
git log --no-merges --pretty=format:"%h" 0d1d7fc..HEAD | tr '\n' ' '

Note: if you revert multiple commits, the order matters. Start with the most recent commit.

# This will create three separate revert commits, use non merge commits only:
git revert a867b4af 25eee4ca 0766c053

# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD

# Similarly, you can revert a range of commits using commit hashes (non inclusive of first hash):
git revert 0d1d7fc..a867b4a

# Reverting a merge commit. You can also use a range of merge commits here.
git revert -m 1 <merge_commit_sha>

# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .

# Then commit. Be sure and write a good message describing what you just did
git commit

The git-revert manpage actually covers a lot of this in its description. Another useful link is this git-scm.com section discussing git-revert.

If you decide you didn't want to revert after all, you can revert the revert (as described here) or reset back to before the revert (see the previous section).

You may also find this answer helpful in this case:
How can I move HEAD back to a previous location? (Detached head) & Undo commits

Answer from Cascabel on Stack Overflow
Top answer
1 of 16
12602

This depends a lot on what you mean by "revert".

Temporarily switch to a different commit

If you want to temporarily go back to it, fool around, then come back to where you are, all you have to do is check out the desired commit:

# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32

Or if you want to make commits while you're there, go ahead and make a new branch while you're at it:

git checkout -b old-state 0d1d7fc32

To go back to where you were, just check out the branch you were on again. (If you've made changes, as always when switching branches, you'll have to deal with them as appropriate. You could reset to throw them away; you could stash, checkout, stash pop to take them with you; you could commit them to a branch there if you want a branch there.)

Hard delete unpublished commits

If, on the other hand, you want to really get rid of everything you've done since then, there are two possibilities. One, if you haven't published any of these commits, simply reset:

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.

If you mess up, you've already thrown away your local changes, but you can at least get back to where you were before by resetting again.

Undo published commits with new commits

On the other hand, if you've published the work, you probably don't want to reset the branch, since that's effectively rewriting history. In that case, you could indeed revert the commits. In many enterprise organisations, the concept of "protected" branches will even prevent history from being rewritten on some major branches. In this case, reverting is your only option.

With Git, revert has a very specific meaning: create a commit with the reverse patch to cancel it out. This way you don't rewrite any history.

First figure out what commits to revert. Depending on the technique chosen below, you want to either revert only the merge commits, or only the non-merge commits.

# This lists all merge commits between 0d1d7fc and HEAD:
git log --merges --pretty=format:"%h" 0d1d7fc..HEAD | tr '\n' ' '

# This lists all non merge commits between 0d1d7fc and HEAD:
git log --no-merges --pretty=format:"%h" 0d1d7fc..HEAD | tr '\n' ' '

Note: if you revert multiple commits, the order matters. Start with the most recent commit.

# This will create three separate revert commits, use non merge commits only:
git revert a867b4af 25eee4ca 0766c053

# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD

# Similarly, you can revert a range of commits using commit hashes (non inclusive of first hash):
git revert 0d1d7fc..a867b4a

# Reverting a merge commit. You can also use a range of merge commits here.
git revert -m 1 <merge_commit_sha>

# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .

# Then commit. Be sure and write a good message describing what you just did
git commit

The git-revert manpage actually covers a lot of this in its description. Another useful link is this git-scm.com section discussing git-revert.

If you decide you didn't want to revert after all, you can revert the revert (as described here) or reset back to before the revert (see the previous section).

You may also find this answer helpful in this case:
How can I move HEAD back to a previous location? (Detached head) & Undo commits

2 of 16
3981

Lots of complicated and dangerous answers here, but it's actually easy:

git revert --no-commit 0d1d7fc3..HEAD
git commit
git push

This will revert everything from the HEAD back to the commit hash (excluded), meaning it will recreate that commit state in the working tree as if every commit after 0d1d7fc3 had been walked back. You can then commit the current tree, and it will create a brand new commit essentially equivalent to the commit you "reverted" to.

(The --no-commit flag lets git revert all the commits at once- otherwise you'll be prompted for a message for each commit in the range, littering your history with unnecessary new commits.)

This is a safe and easy way to rollback to a previous state. No history is destroyed, so it can be used for commits that have already been made public.


Note on merge commits:
If one of the commits between 0766c053..HEAD (inclusive) is a merge then there will be an error popping up (to do with no -m specified). The following link may help those encountering that: Why does git revert complain about a missing -m option? (thanks @timhc22 for pointing out)

Discussions

I'm struggling to understand how to roll back to a previous point. I want to disregard the crossed out chain completely. What am I missing here?
Edit: That was definitely it. I undid the new commit and created a new branch and it is acting as I was expecting now. I decided the last 3 commits I did were just not going to work, so I wanted to roll back to my v0.1.5a commit. So I "Undo Last Commit" a few times to get back there, then tried committing to a chain. I didn't actually create a branch, maybe that was what I did wrong? More on reddit.com
🌐 r/git
12
0
December 11, 2024
Reverting to a specific commit based on commit id with Git? - Stack Overflow
Will a git push origin mybranch then cause the origin repo to be reverted? 2017-05-23T20:49:13.667Z+00:00 ... @javadba Not without a '--force' if there is a deviation 'off of' a previous ancestor. 2019-08-15T21:49:28.297Z+00:00 ... git hard reset "enter commit id here" : It will roll back to ... More on stackoverflow.com
🌐 stackoverflow.com
Best way to revert the 3 last commit?
git reset HEAD^^^? More on reddit.com
🌐 r/git
6
4
October 19, 2017
how do I revert to a previous commit without changes for this scenario ?
I do not think revert does what you think it will do. revert doesn't "revert" back to a previous point in history; it makes a new commit, which "reverts" (undoes / specifically does the opposite of) the commits you've given it. If you have changes to files after the range you've given, you likely will have a merge conflict to fix. To go back in time, you normally would reset to that point; however, if those commits are already on a 'public' server, and you do not want to edit history; then using reverts is the best way. If you are happy with the difference, and are sure which you want to do. Now in this case, you have a dirty tree. You currently have changes that you have not commited. you need to commit them, or stash them, or discard them as the error suggests. git reset --hard commitEarlierNo will get you there directly, if you do not mind potentially changing "public" history on some external server. otherwise git reset --hard HEAD followed by your revert of commits. now if you want, you can still keep those changes with a commit (so long as you correctly change the end revert range reference) or stash them (git stash) and get them back after with a git stash pop be aware that you may have conflicts after that. More on reddit.com
🌐 r/git
6
3
August 4, 2022
🌐
freeCodeCamp
freecodecamp.org › news › git-reverting-to-previous-commit-how-to-revert-to-last-commit
Git Reverting to Previous Commit – How to Revert to Last Commit
October 19, 2022 - To revert to the to the previous commit, run the git revert command along with the commit ID of the current commit.
🌐
Reddit
reddit.com › r/git › i'm struggling to understand how to roll back to a previous point. i want to disregard the crossed out chain completely. what am i missing here?
r/git on Reddit: I'm struggling to understand how to roll back to a previous point. I want to disregard the crossed out chain completely. What am I missing here?
December 11, 2024 - Note that this will still leave your old branch there. It's great for testing alternative solutions. If you absolutely want to roll-back your branch to a previous commit, forgetting all newer commits: git reset --hard <oldcommitID>
Top answer
1 of 4
904

Do you want to roll back your repo to that state, or you just want your local repo to look like that?

If you reset --hard, it will make your local code and local history be just like it was at that commit. But if you wanted to push this to someone else who has the new history, it would fail:

git reset --hard c14809fa

And if you reset --soft, it will move your HEAD to where they were , but leave your local files etc. the same:

git reset --soft c14809fa

So what exactly do you want to do with this reset?

Edit -

You can add "tags" to your repo.. and then go back to a tag. But a tag is really just a shortcut to the sha1.

You can tag this as TAG1.. then a git reset --soft c14809fa, git reset --soft TAG1, or git reset --soft c14809fafb08b9e96ff2879999ba8c807d10fb07 would all do the same thing.

2 of 4
246

I think, bwawok's answer is wrong at some point:

if you do

git reset --soft c14809fa

It will make your local files changed to be like they were then, but leave your history etc. the same.

According to manual: git-reset, "git reset --soft"...

does not touch the index file nor the working tree at all (but resets the head to <commit>, just like all modes do). This leaves all your changed files "Changes to be committed", as git status would put it.

So it will "remove" newer commits from the branch. This means, after looking at your old code, you cannot go to the newest commit in this branch again, easily. So it does the opposide as described by bwawok: Local files are not changed (they look exactly as before "git reset --soft"), but the history is modified (branch is truncated after the specified commit).

The command for bwawok's answer might be:

git checkout <commit>

You can use this to peek at old revision: How did my code look yesterday?

(I know, I should put this in comments to this answer, but stackoverflow does not allow me to do so! My reputation is too low.)

🌐
Graphite
graphite.com › guides › revert-to-previous-commit-git
How to revert to a previous commit in Git - Graphite
This command reverts all changes made from the commit just before <commit-id> to the current HEAD. After reverting locally, you'll likely need to push your changes to the remote repository: ... This updates the remote repository with your revert ...
🌐
TechTarget
techtarget.com › searchitoperations › answer › How-to-roll-back-Git-code-to-a-previous-commit
How to roll back Git code to a previous commit | TechTarget
Admins can reset code versions ... then resetting back one version. Figure 3. The code displays the output after running git reset head~1....
Find elsewhere
🌐
Git
git-scm.com › docs › git-revert
Git - git-revert Documentation
This is useful when reverting more than one commits' effect to your index in a row. ... GPG-sign commits. The keyid argument is optional and defaults to the committer identity; if specified, it must be stuck to the option without a space.
🌐
30 Seconds of Code
30secondsofcode.org › home › git › branch › rewind to commit
Rewind back to a specific commit in Git - 30 seconds of code
May 26, 2023 - # Syntax: git reset [--hard] <commit> git reset 3050fc0 # Rewinds back to `3050fc0` but keeps changes in the working directory git reset --hard c0d30f3 # Rewinds back to `c0d30f3` and deletes changes · You can also use git reset to rewind back ...
🌐
GitKraken
gitkraken.com › home › learn › problems & solutions › how to revert a git commit
Git Revert Commit | Solutions to Git Problems
February 5, 2024 - This will show you a list of your commits along with each commit’s unique ID. Next, copy the commit ID of the commit you want to revert. Now run git revert <commit ID>. This creates a new commit that negates the commit you specified.
🌐
GeeksforGeeks
geeksforgeeks.org › git › how-to-back-previous-commit-in-git
How to Back Previous Commit in Git ? - GeeksforGeeks
June 19, 2024 - Step 2: To revert to the to the previous commit, run the git revert command along with the commit ID of the current commit.
🌐
GoLinuxCloud
golinuxcloud.com › home › devops › git › git revert to previous commit: reset, checkout, or rollback (examples)
Git Revert to Previous Commit: Reset, Checkout, or Rollback (Examples) | GoLinuxCloud
March 16, 2026 - Learn how to revert to a previous commit in Git using reset, revert, checkout, and restore commands. This guide explains how to go back to earlier commits, rollback changes safely, restore files from history, undo pushed commits, and recover lost commits using git reflog.
🌐
DEV Community
dev.to › eva_dev › reverting-to-a-previous-commit-with-git-2ph
Reverting to a Previous Commit with Git - DEV Community
February 3, 2024 - Then enter git stash to stash away any changes you've done since the last commit, and enter git rest --hard 7a217627b999b54b6e60d8a2c7f61e7054da8f7b (the long string is the commit ID).
🌐
Stack Abuse
stackabuse.com › git-revert-to-a-previous-commit
Git: Revert to a Previous Commit
February 16, 2023 - At this point it's highly advised ... like git reset since you'd be rewriting history. Instead, the recommended approach would be to use the revert command. This command works by undoing changes that were made in the specific commit by creating a new commit and not actually removing any previous commits. This is ideal for published ...
🌐
Medium
jeevabyte.medium.com › how-to-revert-to-a-previous-commit-in-git-and-make-it-the-latest-one-6ac766ff78f4
How to Revert to a Previous Commit in Git and Make It the Latest One | by Jeeva-AWSLabsJourney | Medium
March 9, 2025 - If you want to completely discard the last five commits and reset your branch to the state of the previous commit, follow these steps. Run the following command to view the commit history: ... This will display a list of commits with their hashes. Identify the fifth last commit from the top. ... This will reset your branch to that specific commit, deleting all subsequent changes permanently. If your repository is remote (GitHub, GitLab, etc.), you’ll need to force push the changes:
🌐
RunCloud
runcloud.io › blog › git-reset-to-revert-previous-commit
How to Use Git Reset To Revert To Previous Commit
November 6, 2025 - This guide explains how git reset works, how it differs from git revert and git restore, and when to use each. It also walks you through the steps to safely return your repository to a previous commit using git reset.
🌐
Atlassian
atlassian.com › git › tutorials › undoing changes › git revert
How to Revert a Commit in Git? | Atlassian Git Tutorial
It's important to understand that git revert undoes a single commit—it does not "revert" back to the previous state of a project by removing all subsequent commits.
🌐
Codecademy
codecademy.com › article › git-reset-revert-previous-commits
How to Revert to Previous Commits Using Git Reset and Revert | Codecademy
The git revert command is another command that we can use to roll back to previous commits. This command produces a new commit that undoes the changes made in a specific commit, leaving the commit history intact.
🌐
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
Undo the last commit with git reset, revert an older commit with git revert, or remove a commit from history with interactive rebase. All scenarios, step by step.
Published   1 day ago