Pushing to remote repository after merge "creates new remote heads" - is that bad?

30,356

Solution 1

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.

Solution 2

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.

Share:
30,356
eggdrop
Author by

eggdrop

Updated on April 23, 2020

Comments

  • eggdrop
    eggdrop about 4 years
    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