@@ -12,13 +12,13 @@ test_expect_success 'setup' '
git checkout -b A
'
-test_expect_success 'fastforward fail when untracked file has the same content' '
+test_expect_success 'fastforward overwrite untracked file that has the same content' '
test_when_finished "git branch -D B && git reset --hard init && git clean --force" &&
git checkout -b B &&
test_commit --no-tag "tracked" file "content" &&
git checkout A &&
echo content >file &&
- test_must_fail git merge B
+ git merge B
'
test_expect_success 'fastforward fail when untracked file has different content' '
@@ -30,14 +30,14 @@ test_expect_success 'fastforward fail when untracked file has different content'
test_must_fail git merge B
'
-test_expect_success 'normal merge fail when untracked file has the same content' '
+test_expect_success 'normal merge overwrite untracked file that has the same content' '
test_when_finished "git branch -D B && git reset --hard init && git clean --force" &&
git checkout -b B &&
test_commit --no-tag "tracked" file "content" fileB "content" &&
git switch A &&
test_commit --no-tag "exA" fileA "content" &&
echo content >file &&
- test_must_fail git merge B
+ git merge B
'
test_expect_success 'normal merge fail when untracked file has different content' '
@@ -2257,6 +2257,8 @@ static int check_ok_to_remove(const char *name, int len, int dtype,
if (result) {
if (result->ce_flags & CE_REMOVE)
return 0;
+ } else if (!ie_modified(&o->result, ce, st, 0)) {
+ return 0;
}
return add_rejected_path(o, error_type, name);
@@ -2264,7 +2266,8 @@ static int check_ok_to_remove(const char *name, int len, int dtype,
/*
* We do not want to remove or overwrite a working tree file that
- * is not tracked, unless it is ignored.
+ * is not tracked, unless it is ignored and unless it has the same
+ * content than the merged file.
*/
static int verify_absent_1(const struct cache_entry *ce,
enum unpack_trees_error_types error_type,