Between working on some other things, I happened to be reading Documentation/git-merge.txt and ran across the part that says: ...[merge will] abort if there are any changes registered in the index relative to the `HEAD` commit. (One exception is when the changed index entries are in the state that would result from the merge already.) I was pretty sure this statement was wrong, but did some digging to uncover the details and the history. What I thought would turn into a simple three-line documentation fix, ballooned into this patch series. This series might be best read in a different order; I'm not yet sure the right way to structure it. But: * Patch 5 demonstrates one of the ways that the parenthetical sentence is wrong (desirable perhaps, but not what is implemented) * Patch 7 explains the history, the trade-offs, the three ways the parenthetical sentence is wrong, and the many pitfalls we've run into trying to allow for such an exception. Very small documentation fix with a huge commit message. * Patch 6 fixes the breakage demonstrated in patch 5, but if I only submitted patches 5-7, then the testsuite wouldn't pass because this fix uncovered multiple other bugs. That's where patches 1-4 came in. This fix is also kind of opinionated; it takes the stance that allowing the exceptions isn't worth it. Elijah Newren (7): t6044: verify that merges expected to abort actually abort t6044: add a testcase for index matching head, when head doesn't match HEAD merge-recursive: make sure when we say we abort that we actually abort merge-recursive: fix assumption that head tree being merged is HEAD t6044: add more testcases with staged changes before a merge is invoked merge-recursive: enforce rule that index matches head before merging merge: fix misleading pre-merge check documentation Documentation/git-merge.txt | 6 +- builtin/am.c | 6 +- cache.h | 8 -- merge-recursive.c | 14 +-- merge.c | 10 +- t/t6044-merge-unrelated-index-changes.sh | 67 +++++++++++-- t/t7504-commit-msg-hook.sh | 4 +- t/t7611-merge-abort.sh | 118 ----------------------- tree.h | 8 ++ 9 files changed, 87 insertions(+), 154 deletions(-) -- 2.18.0.rc0.49.g3c08dc0fef