reset --hard/read-tree --reset -u: remove unmerged new paths
When aborting a failed merge that has brought in a new path using "git reset --hard" or "git read-tree --reset -u", we used to first forget about the new path (via read_cache_unmerged) and then matched the working tree to what is recorded in the index, thus ending up leaving the new path in the work tree. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
@ -27,4 +27,64 @@ test_expect_success 'reset should work' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'reset should remove remnants from a failed merge' '
|
||||
git read-tree --reset -u HEAD &&
|
||||
git ls-files -s >expect &&
|
||||
sha1=$(git rev-parse :new) &&
|
||||
(
|
||||
echo "100644 $sha1 1 old"
|
||||
echo "100644 $sha1 3 old"
|
||||
) | git update-index --index-info &&
|
||||
>old &&
|
||||
git ls-files -s &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
git ls-files -s >actual &&
|
||||
! test -f old
|
||||
'
|
||||
|
||||
test_expect_success 'Porcelain reset should remove remnants too' '
|
||||
git read-tree --reset -u HEAD &&
|
||||
git ls-files -s >expect &&
|
||||
sha1=$(git rev-parse :new) &&
|
||||
(
|
||||
echo "100644 $sha1 1 old"
|
||||
echo "100644 $sha1 3 old"
|
||||
) | git update-index --index-info &&
|
||||
>old &&
|
||||
git ls-files -s &&
|
||||
git reset --hard &&
|
||||
git ls-files -s >actual &&
|
||||
! test -f old
|
||||
'
|
||||
|
||||
test_expect_success 'Porcelain checkout -f should remove remnants too' '
|
||||
git read-tree --reset -u HEAD &&
|
||||
git ls-files -s >expect &&
|
||||
sha1=$(git rev-parse :new) &&
|
||||
(
|
||||
echo "100644 $sha1 1 old"
|
||||
echo "100644 $sha1 3 old"
|
||||
) | git update-index --index-info &&
|
||||
>old &&
|
||||
git ls-files -s &&
|
||||
git checkout -f &&
|
||||
git ls-files -s >actual &&
|
||||
! test -f old
|
||||
'
|
||||
|
||||
test_expect_success 'Porcelain checkout -f HEAD should remove remnants too' '
|
||||
git read-tree --reset -u HEAD &&
|
||||
git ls-files -s >expect &&
|
||||
sha1=$(git rev-parse :new) &&
|
||||
(
|
||||
echo "100644 $sha1 1 old"
|
||||
echo "100644 $sha1 3 old"
|
||||
) | git update-index --index-info &&
|
||||
>old &&
|
||||
git ls-files -s &&
|
||||
git checkout -f HEAD &&
|
||||
git ls-files -s >actual &&
|
||||
! test -f old
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Reference in New Issue
Block a user