You are describing the result of git merge -s theirs
, which does not exist, and one of the main Git authors insists that it should not exist:. Quoting from that link (these are not my words):
Heh, now you have some readings to do ;-)
I tried not to sound too negative when describing -Xours
and -Xtheirs
there, but actually I think "-s theirs" is even worse. It is how you
would discard what you did (perhaps because the other side has much better
solution than your hack), but that can be much more easily and cleanly
done with:
$ git reset --hard origin
Some people might say "But with 'merge -s theirs', I can keep what I did,
too". That reset is simply discarding what I did.
That logic also is flawed. You can instead:
$ git branch i-was-stupid
$ git reset --hard origin
if you really want to keep record of your failure.
One big problem "-s theirs" has, compared to the above "reset to origin,
discarding or setting aside the failed history" is that your 'master'
history that your further development is based on will keep your failed
crap in it forever if you did "-s theirs". Hopefully you will become a
better programmer over time, and you may eventually have something worth
sharing with the world near the tip of your master branch. When that
happens, however, you cannot offer your master branch to be pulled by
the upstream, as the wider world will not be interested in your earlier
mistakes at all.
You can feel free to disagree with the Git folks and go on and use some of the answers to Is there a "theirs" version of "git merge -s ours"? Note that the accepted answer is not truly a -s theirs
at all. Michael R's answer, using git read-tree
to switch out the index during a --no-commit
merge, is correct.
The method in mayo's comment is also good, and jthill's answer to the other SO question is correct as well.
Your case is a bit different from the one being described above, but really, you can just rename the "bad" branch and rename the "good" branch to master
and go on from there. Anyone "downstream" from you will need this same renaming, so there are multiple points to consider.