rebase -r: do not write MERGE_HEAD unless needed
When we detect that a `merge` can be skipped because the merged commit is already an ancestor of HEAD, we do not need to commit, therefore writing the MERGE_HEAD file is useless. It is actually worse than useless: a subsequent `git commit` will pick it up and think that we want to merge that commit, still. To avoid that, move the code that writes the MERGE_HEAD file to a location where we already know that the `merge` cannot be skipped. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f08110ddd8
commit
85f8d9da21
@ -3191,10 +3191,6 @@ static int do_merge(struct commit *commit, const char *arg, int arg_len,
|
|||||||
}
|
}
|
||||||
|
|
||||||
merge_commit = to_merge->item;
|
merge_commit = to_merge->item;
|
||||||
write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
|
|
||||||
git_path_merge_head(the_repository), 0);
|
|
||||||
write_message("no-ff", 5, git_path_merge_mode(the_repository), 0);
|
|
||||||
|
|
||||||
bases = get_merge_bases(head_commit, merge_commit);
|
bases = get_merge_bases(head_commit, merge_commit);
|
||||||
if (bases && oideq(&merge_commit->object.oid,
|
if (bases && oideq(&merge_commit->object.oid,
|
||||||
&bases->item->object.oid)) {
|
&bases->item->object.oid)) {
|
||||||
@ -3203,6 +3199,10 @@ static int do_merge(struct commit *commit, const char *arg, int arg_len,
|
|||||||
goto leave_merge;
|
goto leave_merge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
|
||||||
|
git_path_merge_head(the_repository), 0);
|
||||||
|
write_message("no-ff", 5, git_path_merge_mode(the_repository), 0);
|
||||||
|
|
||||||
for (j = bases; j; j = j->next)
|
for (j = bases; j; j = j->next)
|
||||||
commit_list_insert(j->item, &reversed);
|
commit_list_insert(j->item, &reversed);
|
||||||
free_commit_list(bases);
|
free_commit_list(bases);
|
||||||
|
@ -396,7 +396,7 @@ test_expect_success 'with --autosquash and --exec' '
|
|||||||
grep "G: +G" actual
|
grep "G: +G" actual
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_failure '--continue after resolving conflicts after a merge' '
|
test_expect_success '--continue after resolving conflicts after a merge' '
|
||||||
git checkout -b already-has-g E &&
|
git checkout -b already-has-g E &&
|
||||||
git cherry-pick E..G &&
|
git cherry-pick E..G &&
|
||||||
test_commit H2 &&
|
test_commit H2 &&
|
||||||
|
Loading…
Reference in New Issue
Block a user