Skip to content

Commit 85f8d9d

Browse files
dschogitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent f08110d commit 85f8d9d

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

sequencer.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3191,10 +3191,6 @@ static int do_merge(struct commit *commit, const char *arg, int arg_len,
31913191
}
31923192

31933193
merge_commit = to_merge->item;
3194-
write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3195-
git_path_merge_head(the_repository), 0);
3196-
write_message("no-ff", 5, git_path_merge_mode(the_repository), 0);
3197-
31983194
bases = get_merge_bases(head_commit, merge_commit);
31993195
if (bases && oideq(&merge_commit->object.oid,
32003196
&bases->item->object.oid)) {
@@ -3203,6 +3199,10 @@ static int do_merge(struct commit *commit, const char *arg, int arg_len,
32033199
goto leave_merge;
32043200
}
32053201

3202+
write_message(oid_to_hex(&merge_commit->object.oid), GIT_SHA1_HEXSZ,
3203+
git_path_merge_head(the_repository), 0);
3204+
write_message("no-ff", 5, git_path_merge_mode(the_repository), 0);
3205+
32063206
for (j = bases; j; j = j->next)
32073207
commit_list_insert(j->item, &reversed);
32083208
free_commit_list(bases);

t/t3430-rebase-merges.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ test_expect_success 'with --autosquash and --exec' '
396396
grep "G: +G" actual
397397
'
398398

399-
test_expect_failure '--continue after resolving conflicts after a merge' '
399+
test_expect_success '--continue after resolving conflicts after a merge' '
400400
git checkout -b already-has-g E &&
401401
git cherry-pick E..G &&
402402
test_commit H2 &&

0 commit comments

Comments
 (0)