This is a continuation of jc/rerere topic that is now in 'next'. The old topic is purely about refactoring and code cleaning and this series builds on top of it. We record a previously seen conflict and its resolution in a subdirectory of $GIT_DIR/rr-cache, and the name of the subdirectory is computed by hashing the "shape" of the conflicted hunk. When a similar-looking conflict is encountered later in the working tree, "git rerere" tries to replay the recorded resolution by running a three-way merge to apply the change to go from the previous conflict to the previous resolution to the current conflicted state. Depending on what appears in the context around the conflicted hunk, however, this three-way merge itself can conflict and fail to apply to a seemingly identical conflict. You _could_ argue that you could merge with reduced context lines to work around the problem, but that is a risky proposition. As a safer approach, these patches allow us to keep more than one pairs of <preimage,postimage> (i.e. conflicted state and its resolution) in the same "shape". If two paths have identical looking conflict and one's resolution does not cleanly replay to the other's conflicted state, we now save the resolutions of these two paths as different "variants" so that they can be applied when we see these conflicts again. I think the basic "record and replay" part is done with this round, but I haven't really reviewed the part that deals with garbage collection of old rerere database entries, which probably needs more work (and could use help, hints hints...). Junio C Hamano (7): rerere: split conflict ID further rerere: scan $GIT_DIR/rr-cache/$ID when instantiating a rerere_id rerere: handle leftover rr-cache/$ID directory and postimage files rerere: delay the recording of preimage rerere: allow multiple variants to exist t4200: rerere a merge with two identical conflicts rerere: do use multiple variants rerere.c | 270 +++++++++++++++++++++++++++++++++++++++++++++--------- rerere.h | 4 +- t/t4200-rerere.sh | 92 ++++++++++++++++++- 3 files changed, 321 insertions(+), 45 deletions(-) -- 2.6.0-rc2-164-gdcd5d00 -- 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