Skip to content

Commit

Permalink
modify/delete conflict resolution overwrites untracked file
Browse files Browse the repository at this point in the history
If a file was removed in HEAD, but modified in MERGE_HEAD, recursive merge
will result in a "CONFLICT (delete/modify)". If the (now untracked) file
already exists and was not added to the index, it is overwritten with the
conflict resolution contents.

In similar situations (cf. test 2), the merge would abort with

"error: Untracked working tree 'file' would be overwritten by merge."

The same should happen in this case.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Clemens Buchacher authored and Junio C Hamano committed Dec 15, 2008
1 parent 544ddb0 commit 7bb1fcc
Showing 1 changed file with 87 additions and 0 deletions.
87 changes: 87 additions & 0 deletions t/t7607-merge-overwrite.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#!/bin/sh

test_description='git-merge
Do not overwrite changes.'

. ./test-lib.sh

test_expect_success 'setup' '
echo c0 > c0.c &&
git add c0.c &&
git commit -m c0 &&
git tag c0 &&
echo c1 > c1.c &&
git add c1.c &&
git commit -m c1 &&
git tag c1 &&
git reset --hard c0 &&
echo c2 > c2.c &&
git add c2.c &&
git commit -m c2 &&
git tag c2 &&
git reset --hard c1 &&
echo "c1 a" > c1.c &&
git add c1.c &&
git commit -m "c1 a" &&
git tag c1a &&
echo "VERY IMPORTANT CHANGES" > important
'

test_expect_success 'will not overwrite untracked file' '
git reset --hard c1 &&
cat important > c2.c &&
! git merge c2 &&
test_cmp important c2.c
'

test_expect_success 'will not overwrite new file' '
git reset --hard c1 &&
cat important > c2.c &&
git add c2.c &&
! git merge c2 &&
test_cmp important c2.c
'

test_expect_success 'will not overwrite staged changes' '
git reset --hard c1 &&
cat important > c2.c &&
git add c2.c &&
rm c2.c &&
! git merge c2 &&
git checkout c2.c &&
test_cmp important c2.c
'

test_expect_failure 'will not overwrite removed file' '
git reset --hard c1 &&
git rm c1.c &&
git commit -m "rm c1.c" &&
cat important > c1.c &&
! git merge c1a &&
test_cmp important c1.c
'

test_expect_success 'will not overwrite re-added file' '
git reset --hard c1 &&
git rm c1.c &&
git commit -m "rm c1.c" &&
cat important > c1.c &&
git add c1.c &&
! git merge c1a &&
test_cmp important c1.c
'

test_expect_success 'will not overwrite removed file with staged changes' '
git reset --hard c1 &&
git rm c1.c &&
git commit -m "rm c1.c" &&
cat important > c1.c &&
git add c1.c &&
rm c1.c &&
! git merge c1a &&
git checkout c1.c &&
test_cmp important c1.c
'

test_done

0 comments on commit 7bb1fcc

Please sign in to comment.