rebase --continue: remove .git/MERGE_MSG
If the user skips the final commit by removing all the changes from the index and worktree with 'git restore' (or read-tree) and then runs 'git rebase --continue' .git/MERGE_MSG is left behind. This will seed the commit message the next time the user commits which is not what we want to happen. Reported-by: Victor Gambier <vgambier@excilys.com> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
bed9b4e312
commit
e5ee33e855
@ -4717,6 +4717,9 @@ static int commit_staged_changes(struct repository *r,
|
|||||||
refs_delete_ref(get_main_ref_store(r), "",
|
refs_delete_ref(get_main_ref_store(r), "",
|
||||||
"CHERRY_PICK_HEAD", NULL, 0))
|
"CHERRY_PICK_HEAD", NULL, 0))
|
||||||
return error(_("could not remove CHERRY_PICK_HEAD"));
|
return error(_("could not remove CHERRY_PICK_HEAD"));
|
||||||
|
if (unlink(git_path_merge_msg(r)) && errno != ENOENT)
|
||||||
|
return error_errno(_("could not remove '%s'"),
|
||||||
|
git_path_merge_msg(r));
|
||||||
if (!final_fixup)
|
if (!final_fixup)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ test_expect_success setup '
|
|||||||
git add hello &&
|
git add hello &&
|
||||||
git commit -m "hello" &&
|
git commit -m "hello" &&
|
||||||
git branch skip-reference &&
|
git branch skip-reference &&
|
||||||
|
git tag hello &&
|
||||||
|
|
||||||
echo world >> hello &&
|
echo world >> hello &&
|
||||||
git commit -a -m "hello world" &&
|
git commit -a -m "hello world" &&
|
||||||
@ -96,6 +97,13 @@ test_expect_success 'moved back to branch correctly' '
|
|||||||
|
|
||||||
test_debug 'gitk --all & sleep 1'
|
test_debug 'gitk --all & sleep 1'
|
||||||
|
|
||||||
|
test_expect_success 'skipping final pick removes .git/MERGE_MSG' '
|
||||||
|
test_must_fail git rebase --onto hello reverted-goodbye^ \
|
||||||
|
reverted-goodbye &&
|
||||||
|
git rebase --skip &&
|
||||||
|
test_path_is_missing .git/MERGE_MSG
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'correct advice upon picking empty commit' '
|
test_expect_success 'correct advice upon picking empty commit' '
|
||||||
test_when_finished "git rebase --abort" &&
|
test_when_finished "git rebase --abort" &&
|
||||||
test_must_fail git rebase -i --onto goodbye \
|
test_must_fail git rebase -i --onto goodbye \
|
||||||
|
@ -31,6 +31,16 @@ test_expect_success 'merge based rebase --continue with works with touched file'
|
|||||||
git rebase --continue
|
git rebase --continue
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'merge based rebase --continue removes .git/MERGE_MSG' '
|
||||||
|
git checkout -f --detach topic &&
|
||||||
|
|
||||||
|
test_must_fail git rebase --onto main HEAD^ &&
|
||||||
|
git read-tree --reset -u HEAD &&
|
||||||
|
test_path_is_file .git/MERGE_MSG &&
|
||||||
|
git rebase --continue &&
|
||||||
|
test_path_is_missing .git/MERGE_MSG
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'apply based rebase --continue works with touched file' '
|
test_expect_success 'apply based rebase --continue works with touched file' '
|
||||||
rm -fr .git/rebase-* &&
|
rm -fr .git/rebase-* &&
|
||||||
git reset --hard &&
|
git reset --hard &&
|
||||||
|
Loading…
Reference in New Issue
Block a user