diff -r ef6f98473a48 -r 2ce00de5cc0e mercurial/merge.py --- a/mercurial/merge.py Sun Nov 22 21:59:52 2015 -0800 +++ b/mercurial/merge.py Sun Nov 22 21:58:28 2015 -0800 @@ -986,13 +986,20 @@ f1, f2, fa, move, anc = args if f == '.hgsubstate': # merged internally continue - repo.ui.debug(" preserving %s for resolve of %s\n" % (f1, f)) - fcl = wctx[f1] - fco = mctx[f2] + if f1 is None: + fcl = filemerge.absentfilectx(wctx, fa) + else: + repo.ui.debug(" preserving %s for resolve of %s\n" % (f1, f)) + fcl = wctx[f1] + if f2 is None: + fco = filemerge.absentfilectx(mctx, fa) + else: + fco = mctx[f2] actx = repo[anc] if fa in actx: fca = actx[fa] else: + # TODO: move to absentfilectx fca = repo.filectx(f1, fileid=nullrev) ms.add(fcl, fco, fca, f) if f1 != f and move: