Rewind back to a specific commit in Git

Git, Branch, Commit · May 26, 2023

One of Git's greatest strengths is its ability to rewind back to a specific commit. This is especially useful when you've made a mistake but haven't pushed your changes yet. In that case, you can simply rewind back to a previous commit, fix your mistake and commit again.

To rewind back to a specific commit, you can use git reset. This command will uncommit and unstage changes, but leave them in the working directory. You can use the --hard flag to uncommit, unstage and delete changes instead.

# 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 a given number of commits. To do so, you can use the HEAD~<n> syntax, where <n> is the number of commits you want to rewind back.

# Syntax: git reset [--hard] HEAD~<n>

git reset HEAD~5
# Rewinds back 5 commits but keeps changes in the working directory

git reset --hard HEAD~3
# Rewinds back 3 commits and deletes changes

The --hard flag is considered a destructive action, which means you should be extra careful when using it. If things go wrong, you might be able to recover your changes by viewing the reference log.

In case you've already pushed some changes to a remote repository, you might not want to rewrite history, especially if other people have already pulled your changes. In that case, you can use git revert to undo a commit without rewriting history.

More like this