How to abort a merge in mercurial?
Solution 1
hg update -C <one of the two merge changesets>
Solution 2
After you do hg merge
, but before hg commit
, your working copy has two parents: the first parent is the changeset you had updated to before the merge and the second parent is the changeset you are merging with. Mercurial will not let you do hg merge
again as long as your working copy has two parents.
You have two options on how to proceed:
If you want to abort the merge and get back to where you started, then do
hg update -C .
This will update the working copy to match the first parent: the
.
always denotes the first parent of the working copy.If you want to re-merge some files then do
hg resolve fileA fileB
This will re-launch the merge tools just as when you did
hg merge
. The resolve command is good if you find out athg merge
-time that your merge tools are configured badly: fix the configuration and runhg resolve --all
. You can runhg resolve
as many times as you want until you are satisfied with the merge.
Solution 3
Today there is hg merge --abort
. See hg help merge
.
deft_code
Professionally, I'm a Site Reliability Engineer at Google. In previous jobs I was primarily a C++ software engineer working with embedded Linux devices. In my spare time (hah!), I like to develop video games.
Updated on December 23, 2021Comments
-
deft_code over 2 years
I goofed up a merge. I'd like to revert then try again.
Is there a way to revert a merge before it is committed?hg revert
doesn't do what I'd like, it only reverts the text of the files. Mercurial aborts my second attempt at merging and complains original merge is still uncommitted.Is there a way to undo a merge after an
hg merge
command but before it's committed? -
Eric-Karl over 13 yearsSimple, efficient and, I think, the best way to do it! :D
-
Omnifarious over 12 years@JonL. - Yes,
--clean
is a synonym for-C
. I'm not sure which changeset.
will refer to, but it will always be one of the two merged changesets. -
Jon L. over 12 years@Omnifarious, cleaning
.
should clean to whatever revision you were on prior to initiating the merge. So if you were at r42, attempted to merge with r43, failed, cleaned, you'd be back on a pristine r42. -
Joel Purra over 11 years
hg update --clean
works, as.
seems to be the the implicit default - it's not explicitly documented though. -
Omnifarious over 11 years@JoelPurra: The meaning of
.
in the context of a merge is rather ambiguous. -
Joel Purra over 11 years@Omnifarious: seemed to default to the working copy changeset that was there before any other changeset was
merge
'd in as the second parent. Good enough for me =) -
Omnifarious over 11 years@JoelPurra: I should look in the code to see if that's the explicit intention. The other possibility I could see is the default being the changeset with the lowest or highest valued hash (which is essentially picking one randomly).