merge-recur: try to merge older merge bases first
It seems to be the only sane way to do it: when a two-head merge is done, and the merge-base and one of the two branches agree, the merge assumes that the other branch has something new. If we start creating virtual commits from newer merge-bases, and go back to older merge-bases, and then merge with newer commits again, chances are that a patch is lost, _because_ the merge-base and the head agree on it. Unlikely, yes, but it happened to me. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
934d9a2407
commit
8918b0c9c2
@ -1191,6 +1191,17 @@ static int merge_trees(struct tree *head,
|
|||||||
return clean;
|
return clean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct commit_list *reverse_commit_list(struct commit_list *list)
|
||||||
|
{
|
||||||
|
struct commit_list *next = NULL, *current, *backup;
|
||||||
|
for (current = list; current; current = backup) {
|
||||||
|
backup = current->next;
|
||||||
|
current->next = next;
|
||||||
|
next = current;
|
||||||
|
}
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Merge the commits h1 and h2, return the resulting virtual
|
* Merge the commits h1 and h2, return the resulting virtual
|
||||||
* commit object and a flag indicating the cleaness of the merge.
|
* commit object and a flag indicating the cleaness of the merge.
|
||||||
@ -1216,7 +1227,7 @@ int merge(struct commit *h1,
|
|||||||
if (ancestor)
|
if (ancestor)
|
||||||
commit_list_insert(ancestor, &ca);
|
commit_list_insert(ancestor, &ca);
|
||||||
else
|
else
|
||||||
ca = get_merge_bases(h1, h2, 1);
|
ca = reverse_commit_list(get_merge_bases(h1, h2, 1));
|
||||||
|
|
||||||
output("found %u common ancestor(s):", commit_list_count(ca));
|
output("found %u common ancestor(s):", commit_list_count(ca));
|
||||||
for (iter = ca; iter; iter = iter->next)
|
for (iter = ca; iter; iter = iter->next)
|
||||||
|
Loading…
Reference in New Issue
Block a user