This consists of two loosely related topics on improving conflicted merge resolution support. The early part of the series is what you already saw. In addition to recording a conflicted merge in the RCS merge style we have traditionally used, this allows you to optionally use "diff3 -m" style. The difference is that the latter format shows the part from the common ancestor that corresponds to the parts both sides modified to cause the conflict, in addition to the changes done on each side. This can be chosen by setting a configuration variable. Rerere mechanism is updated to understand this new format as well, and conflicts from either formats interoperate well, because rerere mechanism only records and uses the changes made on each side, not what was in the common ancestor. The last four patches are to "git checkout" that checks things out of the index. When resolving conflicts, sometimes you would screw up the state of the working tree so badly that you would wish to redo the merge from the beginning for one file, without having to redo the whole merge. Some other times, you already know changes made on one side already solves everything the other side attempted to do, and would want to take the change from that side as a whole. New options supported by "git checkout" when checking out from the index for these purposes are: * git checkout -m -- path This recreates the merge using information staged in stages 1/2/3; * git checkout --ours -- path This writes 'our' version (stage #2) out for the path to the working tree; * git checkout --theirs -- path This writes 'their' version (stage #3) out for the path to the working tree; None of these operations mark the path resolved. They are to help you prepare the working tree into a shape suitable as the resolution, and you will still conclude it with "git add path". Junio C Hamano (12): xdl_fill_merge_buffer(): separate out a too deeply nested function xdiff-merge: optionally show conflicts in "diff3 -m" style xmerge.c: minimum readability fixups xmerge.c: "diff3 -m" style clips merge reduction level to EAGER or less rerere.c: use symbolic constants to keep track of parsing states rerere: understand "diff3 -m" style conflicts with the original merge.conflictstyle: choose between "merge" and "diff3 -m" styles git-merge-recursive: learn to honor merge.conflictstyle checkout: do not check out unmerged higher stages randomly checkout: allow ignoring unmerged paths when checking out of the index checkout --ours/--theirs checkout -m: recreate merge when checking out of unmerged index Documentation/config.txt | 8 ++ builtin-checkout.c | 206 +++++++++++++++++++++++++++++++++++---- builtin-merge-file.c | 17 +++- builtin-merge-recursive.c | 2 +- ll-merge.c | 16 +++- rerere.c | 29 ++++-- t/t6023-merge-file.sh | 44 +++++++++ t/t7201-co.sh | 133 +++++++++++++++++++++++++ xdiff-interface.c | 20 ++++ xdiff-interface.h | 2 + xdiff/xdiff.h | 6 + xdiff/xmerge.c | 237 +++++++++++++++++++++++++++++++-------------- 12 files changed, 612 insertions(+), 108 deletions(-) -- 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