15
votes
  1. I initialized a Mercurial project on Machine A, committed my changes and uploaded them to a remote repository.

  2. Then I cloned that repository on Machine B, committed some additional changes and uploaded them to the same remote repository.

In both cases, I uploaded the changes with the same command:

hg push https://username:password@domain/user/repository/

Now I'm back on Machine A and I've pulled from the remote repository and merged any changes between the two changesets using the KDiff3 GUI tool using the commands:

hg pull
hg merge
hg commit

However, when I try to push the latest changes from Machine A back to the remote repository after this pull and merge, I get this message:

hg push https://username:password@domain/user/repository/
pushing to https://username:password@domain/user/repository/
searching for changes
abort: push creates new remote heads!
(did you forget to merge? use push -f to force)

Why does it say "did you forget to merge"? -- I completed the merge.

Is it bad to force the push and create "new remote heads"?

If so, how do I avoid this?


UPDATE:

I ran "hg merge" again and got this output:

5 files updated, 1 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon

So I ran 'hg up --clean' and it reported:

6 files updated, 0 files merged, 1 files removed, 0 files unresolved

Now when I type 'hg heads', it says:

changeset:   11
tag:         tip
parent:      9
user:        eggdrop
date:        Tue Oct 20 16:27:44 2009 -0400
summary:     Machine A after merge

changeset:   10
parent:      7
user:        chickensoup
date:        Thu Oct 15 03:27:23 2009 -0400
summary:     Machine B changes to be pulled onto Machine A
2
Yes, I resolved all differences and committed the merge. So, when I type "hg status" there is no output because everything local has been checked in.eggdrop

2 Answers

9
votes

You ran hg up --clean. That means you undid the merge, which means you still need to merge. You have an unresolved file when you merge. Re-read your error message:

5 files updated, 1 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon

You need to resolve the merge conflict and then complete the merge with hg resolve. Then you will have successfully merged your two heads.

And to answer your question: no, it's not bad to have two remote heads. It just means you need to merge them (preferably ASAP) before you push anything else to the remote server.

So to fix, just run hg merge, resolve the one conflict, then run hg resolve.

2
votes

First: View your changes with hg log. The following didn't help in my case:

  • hg pull and hg merge (before you pull check against hg incoming)
  • or: hg pull --rebase

But this helped.

hg merge [revision]

I found that I needed to explicitly merge some revisions which looked like heads.