How to abandon a hg merge?

82,784

Solution 1

You can discard uncommitted changes with the -C (or --clean) flag:

hg update -C -r 3

BEWARE: Everything that was not committed will be gone!

After that you should probably use some kind of code formatter tool to do the entire operation, or at least some find and replace with regular expressions. Something as simple as replacing what matches ^____ (use 4 spaces instead of underscores) with __ (2 spaces), repeated a few times (unless you have insanely some nested code) should work.

Solution 2

BTW: if you just revert the merge you did and 3 is not your revision number you can do this:

hg update -C -r .

Solution 3

To undo an uncommitted merge, use

hg update --clean

which will check out a clean copy of the original merge parent, losing all changes.

Solution 4

I apparently just needed to hg update -C -r 3, which overwrites my local files with the rev in mind (which is what I thought hg update would do; but I was wrong.) Thanks for my help!

Share:
82,784
Grumdrig
Author by

Grumdrig

My standard development platform is an HP 9100B with an HP 9125A plotter attached. (TODO: Update this section.)

Updated on July 08, 2022

Comments

  • Grumdrig
    Grumdrig almost 2 years

    I'm new to collaborating with Mercurial. My situation:

    • Another programmer changed rev 1 of a file to replace 4-space indents with 2-space indent. (I.e. changed every line.) Call that rev 2, pushed to the remote repo.
    • I've committed substantive changes rev 1 with various code changes in my local workspace. Call that rev 3.
    • I've hg pulled and hg merged without a clear idea of what was going on.
    • The conflicts are myriad and not really substantive.

    So I really wish I'd changed my local repo to 2-space indents before merging; then the merge will be trivial (i'm supposing). But I can't seem to back up. I think I need to hg update -r 3 but it says abort: outstanding uncommitted merges.

    How can I undo the merge, changes spacing in my local repo, and remerge?

  • Grumdrig
    Grumdrig about 14 years
    Oh - thanks. You must have answered right about when I figured it out myself. I'm in emacs, so M-x indent-region did the reindent trick.
  • Martin Geisler
    Martin Geisler about 14 years
    Adding -C or --clean is how you tell Mercurial to go ahead, even when it will throw away some modified files. You're right that hg update -r X will normally take you to revision X, but when you are in a merge you need to insist a bit more :-)
  • Warren  P
    Warren P over 12 years
    I think that "hg revert --all --cancelmerge" would be far more intuitive.
  • Jeroen Wiert Pluimers
    Jeroen Wiert Pluimers over 9 years
    For anyone like me that at first didn't get how this works: the dot . is a shortcut to the previous revision.
  • Oleg Abrazhaev
    Oleg Abrazhaev about 9 years
    great answer! should be best
  • djsutho
    djsutho almost 9 years
    Worth noting that untracked files will not be removed.
  • math
    math over 8 years
    @Thymine: From hg help update I get: If no changeset is specified, update to the tip of the current named branch... and tip might not always be your current revision you are working on. I did not test it, so far..
  • Thymine
    Thymine over 8 years
    Ah that is a good detail to know... actually I'm going to delete my comment claiming leaving off -r . is the same
  • Naveen Kumar V
    Naveen Kumar V almost 4 years
    Simple and very helpful.