Had it again, but my workflow is improving a little: 1) "hg fetch --switch-parent" still does a pull but aborts the merge: $ hg fetch --switch-parent || echo 'exit status' $? ; date pulling from https://bitbucket.org/vim-mirror/vim searching for changes sampling from both directions adding changesets adding manifests adding file changes added 13 changesets with 34 changes to 23 files (+1 heads) resolving manifests 0 files updated, 0 files merged, 0 files removed, 0 files unresolved merging with 7275:8896150aba23 resolving manifests runtime/doc/tags: untracked file differs abort: untracked files in working directory differ from files in requested revision exit status 255 Thu 19 Nov 22:32:03 CET 2015 2) then after updating to the latest common ancestor and back to the newest pulled changeset: $ hg merge -r 7262 resolving manifests local changed runtime/doc/tags which remote deleted use (c)hanged version or (d)elete? d removing runtime/doc/tags [...] 103 files updated, 0 files merged, 1 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg commit -m 'merge local with https://bitbucket.org/vim-mirror/vim' committing files: [...] committing manifest committing changelog committed changeset 7276:01ce4237faad N.B. - revision 7262 (decimal) was the tip before the fetch - Under 13.2 the fetch succeeded, telling me "remote changed runtime/doc/tags which local deleted" instead (since we were on the other branch) - I'd prefer to see fewer files "updated" by the merge step, as it used to be under 13.2. I think it makes a difference to the following "make" (does it react the same way to a file left in place and to a file removed then added back?). - Strangely enough, the "hg log" entry for the merge commit mentions only one file (the one I removed by answering d at the prompt), not 103. - By doing "hg diff" between the new tip (the merge commit) and one of its parents, I notice that some files listed in .hgignore (linkable objects from a previous "make", apparently) have been "added". Is this normal? (The .hgignore uses glob syntax, its first line is "syntax: glob", and no other line starts with "syntax".) It seems the merge succeeds in one direction and fails in the other one, while obtaining (AFAICT) the same result in the working directory.