Aggressive three-way merge: fix D/F case
When the ancestor used to have a blob "P", your tree removed it, and the tree you are merging with also removed it, the agressive three-way cleanly merges to remove that blob. If the other tree added a new blob "P/Q" while removing "P", it should also merge cleanly to remove "P" and create "P/Q" (since neither the ancestor nor your tree could have had it, so it is a typical "created in one"). The "aggressive" rule is not new anymore. Reword the stale comment. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
@ -74,7 +74,7 @@ test_expect_success 'setup a merge where dir a/b-2 changed to symlink' '
|
|||||||
git tag test2
|
git tag test2
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_failure 'merge should not have conflicts (resolve)' '
|
test_expect_success 'merge should not have conflicts (resolve)' '
|
||||||
git reset --hard &&
|
git reset --hard &&
|
||||||
git checkout baseline^0 &&
|
git checkout baseline^0 &&
|
||||||
git merge -s resolve test2 &&
|
git merge -s resolve test2 &&
|
||||||
|
@ -767,7 +767,8 @@ int threeway_merge(struct cache_entry **stages, struct unpack_trees_options *o)
|
|||||||
remote = NULL;
|
remote = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* First, if there's a #16 situation, note that to prevent #13
|
/*
|
||||||
|
* First, if there's a #16 situation, note that to prevent #13
|
||||||
* and #14.
|
* and #14.
|
||||||
*/
|
*/
|
||||||
if (!same(remote, head)) {
|
if (!same(remote, head)) {
|
||||||
@ -781,7 +782,8 @@ int threeway_merge(struct cache_entry **stages, struct unpack_trees_options *o)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We start with cases where the index is allowed to match
|
/*
|
||||||
|
* We start with cases where the index is allowed to match
|
||||||
* something other than the head: #14(ALT) and #2ALT, where it
|
* something other than the head: #14(ALT) and #2ALT, where it
|
||||||
* is permitted to match the result instead.
|
* is permitted to match the result instead.
|
||||||
*/
|
*/
|
||||||
@ -811,12 +813,13 @@ int threeway_merge(struct cache_entry **stages, struct unpack_trees_options *o)
|
|||||||
if (!head && !remote && any_anc_missing)
|
if (!head && !remote && any_anc_missing)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Under the new "aggressive" rule, we resolve mostly trivial
|
/*
|
||||||
|
* Under the "aggressive" rule, we resolve mostly trivial
|
||||||
* cases that we historically had git-merge-one-file resolve.
|
* cases that we historically had git-merge-one-file resolve.
|
||||||
*/
|
*/
|
||||||
if (o->aggressive) {
|
if (o->aggressive) {
|
||||||
int head_deleted = !head && !df_conflict_head;
|
int head_deleted = !head;
|
||||||
int remote_deleted = !remote && !df_conflict_remote;
|
int remote_deleted = !remote;
|
||||||
struct cache_entry *ce = NULL;
|
struct cache_entry *ce = NULL;
|
||||||
|
|
||||||
if (index)
|
if (index)
|
||||||
|
Reference in New Issue
Block a user