@@ -89,6 +89,11 @@ merge.autoStash::
`--autostash` options of linkgit:git-merge[1].
Defaults to false.
+merge.overwritesamecontent::
+ When set to true, it will modify the behavior of git merge
+ to overwrite untracked files that have the same name and
+ content than files in the merged commit.
+
merge.tool::
Controls which merge tool is used by linkgit:git-mergetool[1].
The list below shows the valid built-in values.
@@ -658,6 +658,8 @@ static int git_merge_config(const char *k, const char *v, void *cb)
} else if (!strcmp(k, "merge.autostash")) {
autostash = git_config_bool(k, v);
return 0;
+ } else if (!strcmp(k,"merge.overwritesamecontent")) {
+ overwrite_same_content = git_config_bool(k, v);
}
status = fmt_merge_msg_config(k, v, cb);
@@ -60,4 +60,25 @@ test_expect_success 'merge fail when tracked file modification is unstaged' '
test_must_fail git merge --overwrite-same-content B
'
+test_expect_success 'fastforward overwrite untracked file that has the same content with the configuration variable' '
+ test_when_finished "git branch -D B && git reset --hard init && git clean --force" &&
+ test_config merge.overwritesamecontent true &&
+ git checkout -b B &&
+ test_commit --no-tag "tracked" file "content" &&
+ git checkout A &&
+ echo content >file &&
+ git merge B
+'
+
+test_expect_success 'normal merge overwrite untracked file that has the same content with the configuration variable' '
+ test_when_finished "git branch -D B && git reset --hard init && git clean --force" &&
+ test_config merge.overwritesamecontent true &&
+ 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 &&
+ git merge B
+'
+
test_done