Thomas Rast <trast@xxxxxxxxxxx> writes: > Jeff King <peff@xxxxxxxx> writes: > >> On Thu, Jun 20, 2013 at 03:06:01PM +0200, Thomas Rast wrote: >> >>> +test_expect_success 'pulling into void does not overwrite staged files' ' >>> + git init cloned-staged-colliding && >>> + ( >>> + cd cloned-staged-colliding && >>> + echo "alternate content" >file && >>> + git add file && >>> + test_must_fail git pull .. master && >>> + echo "alternate content" >expect && >>> + test_cmp expect file && >>> + git cat-file blob :file >file.index && >>> + test_cmp expect file.index >>> + ) >>> +' >> >> I naively would have expected this to leave us in a conflicted state >> over "file". But I guess read-tree just rejects it, because we are not >> doing a real three-way merge. I'm not sure it is that big a deal; this >> is more about safety than about creating a conflicted/resolvable state. > > Note that the test_must_fail essentially tests that the merge is rejected. Bah, no it doesn't, a conflicting merge also returns a nonzero status. Sigh. If you meant we should actually conflict, I'm not sure what options there would be other than actually calling a merge driver. And we could actually do this like so (it'll obviously break the tests): diff --git i/git-pull.sh w/git-pull.sh index 1f84383..b3d36a8 100755 --- i/git-pull.sh +++ w/git-pull.sh @@ -276,7 +276,7 @@ then # lose index/worktree changes that the user already made on # the unborn branch. empty_tree=4b825dc642cb6eb9a060e54bf8d69288fbee4904 - git read-tree -m -u $empty_tree HEAD || exit 1 + git merge-recursive $empty_tree -- $(git write-tree) HEAD || exit 1 exit fi -- Thomas Rast trast@{inf,student}.ethz.ch -- 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