diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-08-30 00:40:36 +0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-08-31 03:46:25 +0400 |
commit | 8fdcf3125465f70c0cad5be5ab192d46e46307c7 (patch) | |
tree | 9146b01c85b07f5211eae66cf575d78dc69950ab /t | |
parent | 53d1589ff6bd336e3ece39e0a963a3d2a537cf96 (diff) |
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>
Diffstat (limited to 't')
-rwxr-xr-x | t/t7201-co.sh | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/t/t7201-co.sh b/t/t7201-co.sh index 9ad5d635a2..83a366f1e7 100755 --- a/t/t7201-co.sh +++ b/t/t7201-co.sh @@ -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 |