Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git merge, then revert, then revert the revert

Tags:

git

merge

revert

So we've gotten a git branch into a tricky state:

Two branches:

* master
* other_branch

Last week someone accidentally merged other_branch (prematurely) onto master and pushed to origin. We noticed the error and I, in my naivete, committed

git revert bad_merge_commit

to "fix" the problem. Everything looked ok, we moved on with our lives...

Today we attempted to merge master into other_branch as a step towards bringing other_branch into master. But my revert seems to have caused a nightmare. When master merges into other_branch, all (most?) of the work on other_branch is deleted. I presume this is because my revert instructs all the older commits to be reverted.

There are of course now many days' worth of commits on master on top of my revert, so untangling this looks like it may be difficult.

Is there some way to repair the damage? Can I perhaps reach in with some rebasing argument and delete the two offending commits?

Many thanks!

[Update - adding detail of current state as requested]

other_branch was branched off of master quite some time ago. Our standard practice is to merge master repeatedly into other_branch as we go to minimize buildup of conflicts (sometimes we rebase, but not in this case).

master commits A | B | C | BAD_MERGE [other_branch_@S] | REVERT_OF_BAD | D | E | F ... HEAD

other_branch commits P | Q | R | S [BAD_MERGE_FROM_HERE] | T | U | V ... HEAD

Attempt to merge master HEAD to other_branch HEAD causes problem.

Charles, I'm currently attempting a fix on a duplicate of master using the solution you suggested here: How to remove selected commit log entries from a Git repository while keeping their changes?.

[/Update]

like image 703
Wikiup Avatar asked Mar 24 '11 03:03

Wikiup


People also ask

How do I revert changes after merge?

You can use the Git reset command to undo a merge. Firstly, you need to check for the commit hash (or id) so you can use it to go back to the previous commit. To check for the hash, run git log or git reflog . git reflog is a better option because things are more readable with it.

How do I revert a merged merge request?

After the merge request has been merged, use the Revert button to revert the changes introduced by that merge request. After you click that button, a modal appears where you can choose to revert the changes directly into the selected branch or you can opt to create a new merge request with the revert changes.

What happens if you revert a revert?

As weird as it may sound, this is the easy solution for our problem. Revert the Revert will invert the invert and will undo the revert.


1 Answers

Yes, the problem is that the revert undid the changes introduced by the merge, but not merge itself. I think the addendum section of https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.html describes a possible solution.

This document is also part of Git, under Debian you will find it at /usr/share/doc/git-doc/howto/revert-a-faulty-merge.txt

like image 169
Lars Noschinski Avatar answered Oct 10 '22 09:10

Lars Noschinski