Mercurial: How to deal with one branch that has two heads

So you have this:

o--o--o--A--B  <- older unnecessary head
       \
        1--2--3--4--5--6  <- newer ‘good’ head

…and you don’t need A and B, absolutely, 100% sure. If you aren’t sure, and there are possibly salvageable things in A and B, better merge the heads to combine the changes. As Aaron said, Mercurial is good at it.

Now you have two options:

  • get rid of the old head, or
  • do a dummy merge of two heads that ignores head B.

If changesets A and B are present in other repositories you don’t control, e.g. if other people pulled A and B into their repositories, or you pushed A and B to a public repository (say, Bitbucket), then you’ve released A and B into the wild, and can’t get rid of them. You should do a dummy merge:

$ hg up 6
$ hg --config ui.merge=internal:local merge

This will ignore any changes from A and B when merging.

If, on the other hand, A and B are private, you can either strip them:

$ hg strip A

(Rev A and descendants stripped; enable the MQ extension to make strip available.)

Or, make a new clone of your repository without changesets A and B:

$ hg clone myrepo myrepo2-clone -r 6

(Only rev 6 and ancestors added to the clone.)

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)