Undo a merge/rebase

Have you merged the wrong branch into your branch? or maybe you rebased your branch on the main branch but something went wrong during the process? Don’t worry! You can undo a merge/rebase process fairly easily.

Before doing a dangerous operation, like merging or rebasing, Git saves your previous HEAD location in a special variable called ORIG_HEAD. This way you can always go back to where HEAD was before you started the operation.

Let’s say I have a branch called feature_1. I have accidentally merged the wrong branch into it. Instead of merging main, I merged develop to it (commit af735d2). I would like to undo this operation.

*   af735d2 (HEAD -> feature_1) Merge branch 'develop' into feature_1
|\
| * db7d7a6 (develop) add login button
| * 2f0ae72 (main) add test fixtures
* | 2d487f5 create user profile page
|/
* 2f591bd fix bug #1
* 290fc8b add db config file

Before I did the merge, Git saved the value of the previous HEAD location to the ORIG_HEAD variable. In this case, 2d487f5. To remove the last commit I can instruct Git to reset to the location of ORIG_HEAD like this:

(feature_1)$ git reset --hard ORIG_HEAD

Now my commit tree is clean, and I am back to where I was before the wrong merge. Notice that the merge commit is removed:

* db7d7a6 (develop) add login button
* 2f0ae72 (main) add test fixtures
| * 2d487f5 (HEAD -> feature_1) create user profile page
|/
* 2f591bd fix bug #1
* 290fc8b add db config file

You can use the same command for undoing a rebase.

Subscribe via RSS