checkout: do not check out unmerged higher stages randomly
During a conflicted merge when you have unmerged stages for a path F in the index, if you said: $ git checkout F we rewrote F as many times as we have stages for it, and the last one (typically "theirs") was left in the work tree, without resolving the conflict. This fixes it by noticing that a specified pathspec pattern matches an unmerged path, and by erroring out. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
@ -337,4 +337,26 @@ test_expect_success \
|
||||
test refs/heads/delete-me = "$(git symbolic-ref HEAD)" &&
|
||||
test_must_fail git checkout --track -b track'
|
||||
|
||||
test_expect_success 'checkout an unmerged path should fail' '
|
||||
rm -f .git/index &&
|
||||
O=$(echo original | git hash-object -w --stdin) &&
|
||||
A=$(echo ourside | git hash-object -w --stdin) &&
|
||||
B=$(echo theirside | git hash-object -w --stdin) &&
|
||||
(
|
||||
echo "100644 $A 0 fild" &&
|
||||
echo "100644 $O 1 file" &&
|
||||
echo "100644 $A 2 file" &&
|
||||
echo "100644 $B 3 file" &&
|
||||
echo "100644 $A 0 filf"
|
||||
) | git update-index --index-info &&
|
||||
echo "none of the above" >sample &&
|
||||
cat sample >fild &&
|
||||
cat sample >file &&
|
||||
cat sample >filf &&
|
||||
test_must_fail git checkout fild file filf &&
|
||||
test_cmp sample fild &&
|
||||
test_cmp sample filf &&
|
||||
test_cmp sample file
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Reference in New Issue
Block a user