On Mon, Aug 25, 2014 at 10:52 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > On Mon, Aug 25, 2014 at 12:44 PM, Jeff King <peff@xxxxxxxx> wrote: >> For my own curiosity, how do you get into this situation, and what does >> it mean to have multiple stage#1 entries for the same path? What would >> "git cat-file :1:path" output? > > That is how we natively (read: not with the funky "virtual" stuff > merge-recursive does) express a merge with multiple merge bases. > You also should be able to read this in the way how "git merge" invokes > merge strategies (one or more bases, double-dash and then current > HEAD and the other branches). I think there are some tests in 3way > merge tests that checks what should happen when our HEAD matches > one of the stage #1 while their branch matches a different one of the > stage #1, too. I'm a bit lost with this, conceptually it doesn't seem to be any problem with having multiple merge bases, but I don't manage to reproduce it. With "natively" do you mean some internal state that is never written into the index? If this were the case then there wouldn't be any problem with the restriction when reading the index file. I have also tried to reproduce it by directly calling git-merge-recursive and the most I have got is what it seemed to be like a conflict in the stage #1: $ git ls-files -s 100644 1036ba5101378f06aa10c5fa249b67e14f83166b 1 conflict 100644 2638c45f8e7bc5b56f70e92390153572811782c3 2 conflict 100644 178481050188cf00d7d9cd5a11e43ab8fab9294f 3 conflict $ git cat-file blob 1036ba5101378f06aa10c5fa249b67e14f83166b <<<<<<< Temporary merge branch 1 G ======= E F >>>>>>> Temporary merge branch 2 And after thinking a bit more about it, I don't see a way to have two stage #1 entries for the same path with git commands only. It seems that all entries are added through the add_index_entry_with_check() function (except maybe the added to the cached tree extension), and this function replaces existing entries if they have the same name and stage. Also, all tests pass with the patch, without allowing two entries for the same stage. So I'm afraid that I don't fully understand this case :/ -- 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