[RFC PATCH 0/7] merge requirement: index matches head
- From
Elijah Newren <newren@gmail.com>
- Date
- Jun 3, 2018, 06:58 UTC
- Message-ID
- <20180603065810.23841-1-newren@gmail.com>
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