From: ZheNing Hu <adlternative@xxxxxxxxx> If we set the value of the environment variable GIT_CHERRY_PICK_HELP when using `git cherry-pick`, CHERRY_PICK_HEAD will be deleted, then we will get an error when we try to use `git cherry-pick --continue` or other cherr-pick command. So add option action check in print_advice(), we will not remove CHERRY_PICK_HEAD if we are indeed cherry-picking instead of rebasing. Signed-off-by: ZheNing Hu <adlternative@xxxxxxxxx> --- [GSOC] cherry-pick: fix bug when used with GIT_CHERRY_PICK_HELP E.g. We are now in the branch main, we want to cherry-pick commit ac346df, then we want to use GIT_CHERRY_PICK_HELP to use customized advice: GIT_CHERRY_PICK_HELP="you should use git cherry-pick --continue after resloving the conflict!" git cherry-pick ac346df then we can see the correct advice message, but after that, if we want to use "git cherry-pick --continue" or other cherry-pick commands, an error will appear. So this patch fixes this bug when git cherry-pick is used with environment variable GIT_CHERRY_PICK_HELP. Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1001%2Fadlternative%2Fcherry-pick-help-fix-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1001/adlternative/cherry-pick-help-fix-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/1001 sequencer.c | 5 +++-- t/t3507-cherry-pick-conflict.sh | 25 ++++++++++++++++++++----- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/sequencer.c b/sequencer.c index 0bec01cf38e..c01b0b9e9c9 100644 --- a/sequencer.c +++ b/sequencer.c @@ -409,8 +409,9 @@ static void print_advice(struct repository *r, int show_hint, * (typically rebase --interactive) wants to take care * of the commit itself so remove CHERRY_PICK_HEAD */ - refs_delete_ref(get_main_ref_store(r), "", "CHERRY_PICK_HEAD", - NULL, 0); + if (opts->action != REPLAY_PICK) + refs_delete_ref(get_main_ref_store(r), "", "CHERRY_PICK_HEAD", + NULL, 0); return; } diff --git a/t/t3507-cherry-pick-conflict.sh b/t/t3507-cherry-pick-conflict.sh index 014001b8f32..70becaf27aa 100755 --- a/t/t3507-cherry-pick-conflict.sh +++ b/t/t3507-cherry-pick-conflict.sh @@ -109,14 +109,29 @@ test_expect_success \ test_must_fail git rev-parse --verify CHERRY_PICK_HEAD ' -test_expect_success 'GIT_CHERRY_PICK_HELP suppresses CHERRY_PICK_HEAD' ' - pristine_detach initial && +test_expect_success 'GIT_CHERRY_PICK_HELP respects CHERRY_PICK_HEAD' ' + git init repo && ( + cd repo && + git branch -M main && + echo 1 >file && + git add file && + git commit -m 1 && + echo 2 >file && + git add file && + git commit -m 2 && + git checkout HEAD~ && + echo 3 >file && + git add file && + git commit -m 3 && GIT_CHERRY_PICK_HELP="and then do something else" && export GIT_CHERRY_PICK_HELP && - test_must_fail git cherry-pick picked - ) && - test_must_fail git rev-parse --verify CHERRY_PICK_HEAD + test_must_fail git cherry-pick main && + git rev-parse --verify CHERRY_PICK_HEAD >actual && + git rev-parse --verify main >expect && + test_cmp expect actual && + git cherry-pick --abort + ) ' test_expect_success 'git reset clears CHERRY_PICK_HEAD' ' base-commit: daab8a564f8bbac55f70f8bf86c070e001a9b006 -- gitgitgadget