Hi all, This is a more polished version of a series I sent a couple of days ago [1]. Thanks to Junio for some helpful advice. The purpose: When outputting diff3-style conflict hunks, this patch series adds a label for the common ancestor (like diff3 -m would): <<<<<<< ours Text from the current branch ||||||| base Text from the merge base ======= Text from the remote branch >>>>>>> theirs Apparently, without this label, smerge-mode.el found in emacs 22 and later has trouble parsing the conflict hunks created by git with merge.conflictstyle=diff3. More importantly, humans can sometimes use a reminder of what the ancestor represents, especially in cases like cherry-pick and revert. As before, the bad news is that sometimes the labels for the ancestor are kind of pointless, as in “merged common ancestors” for merge-recursive. I am not planning to improve this. I’d be thrilled if someone changes it to something like “merge of ac76d, 8d7ca9, and 81873”. The good news is a couple of new tests thrown in. All the other changes I can remember are detailed in the comments after each patch (probably missing some, since I haven’t started using git notes for this). I think the series is ready to receive wider exposure. Please let me know if you run into any problems when trying it out. I would also be glad to hear thoughts about the details of its behavior and implementation. The series is based against master. There are a few small conflicts with next, but nothing major; I’ll point out the few that I remember as I go. Enjoy, Jonathan Nieder (16): xdl_merge(): add optional ancestor label to diff3-style output xdl_merge(): move file1 and file2 labels to xmparam structure merge-file --diff3: add a label for ancestor ll_merge(): add ancestor label parameter for diff3-style output checkout --conflict=diff3: add a label for ancestor merge_file(): add comment explaining behavior wrt conflict style merge_trees(): add ancestor label parameter for diff3-style output tests: document format of conflicts from checkout -m checkout -m --conflict=diff3: add a label for ancestor tests: document cherry-pick behavior in face of conflicts revert_or_cherry_pick(): get oneline_body from get_oneline() compat: add mempcpy() revert: simplify get_oneline() using mempcpy revert: clarify label on conflict hunks cherry-pick: add a label for ancestor merge-recursive: add a label for ancestor builtin/checkout.c | 3 +- builtin/merge-file.c | 7 +- builtin/revert.c | 33 ++++--- git-compat-util.h | 9 ++ ll-merge.c | 28 +++--- ll-merge.h | 2 +- merge-file.c | 8 ++- merge-recursive.c | 12 ++- merge-recursive.h | 1 + rerere.c | 4 +- t/t3507-cherry-pick-conflict.sh | 198 +++++++++++++++++++++++++++++++++++++++ t/t6023-merge-file.sh | 2 +- t/t7201-co.sh | 69 ++++++++++++- xdiff/xdiff.h | 6 +- xdiff/xmerge.c | 29 ++++-- 15 files changed, 358 insertions(+), 53 deletions(-) create mode 100644 t/t3507-cherry-pick-conflict.sh [1] http://thread.gmane.org/gmane.linux.debian.devel.bugs.general/680778/focus=142176 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html