On Fri, Nov 22, 2019 at 03:10:20PM -0800, Brian Norris wrote: > Hi! I'm using git 2.24 (or, a variant of that packaged my distro -- I > can try to build my own if this is deemed not reproducible), and I > feel like I've been seeing a regression here: > > Previously, when reverting multiple commits (with the default --edit > behavior), as soon as I'm done editing the first revert commit > message, the second revert commit pops up an editor, and I'm on my > way. Now, it seems to require an extra 'git revert --continue' prompt > in between, yet it doesn't actually recommend that. This is highly > confusing, and seemingly unnecessary. Thanks for the report, this is indeed a regression in v2.24.0: it bisects down to a47ba3c777 (rebase -i: check for updated todo after squash and reword, 2019-08-19) [Cc'ing Phillip]. It's not specific to 'git revert', but with a slight variation affects 'git cherry-pick' as well. > An annotated transcript provided below. I transcribed your transcript into tests that can be run in our test framework and demonstrate this regression: --- >8 --- #!/bin/sh test_description='test' . ./test-lib.sh test_expect_success "Brian's revert regression" ' test_create_repo revert && ( cd revert && echo 1 >file && git add file && git commit -m first && echo 2 >file && git commit -am second && echo 3 >file && git commit -am third && git checkout -b branch && git revert --edit HEAD HEAD^ && echo 1 >expect && test_cmp expect file ) ' test_expect_success "a variant of Brian's regression for cherry-pick" ' test_create_repo cherry-pick && ( cd cherry-pick && echo 1 >file && git add file && git commit -m first && echo 2 >file && git commit -am second && echo 3 >file && git commit -am third && git checkout -b branch HEAD^^ && git cherry-pick --edit master^ master && echo 3 >expect && test_cmp expect file ) ' test_done --- >8 --- They both succeed on a47ba3c777's parent, but fail on a47ba3c777 when the 'git revert' or 'git cherry-pick' commands return with exit code 1 after reverting/cherry-picking the first commit instead of processing the second commit: + git revert --edit HEAD HEAD^ [branch 88ea48c] Revert "third" Author: A U Thor <author@xxxxxxxxxxx> 1 file changed, 1 insertion(+), 1 deletion(-) On branch branch Revert currently in progress. nothing to commit, working tree clean error: last command exited with $?=1 not ok 1 - Brian's revert regression + git cherry-pick --edit master^ master [branch 2cb3f74] second Author: A U Thor <author@xxxxxxxxxxx> Date: Sat Nov 23 00:17:32 2019 +0000 1 file changed, 1 insertion(+), 1 deletion(-) On branch branch Cherry-pick currently in progress. nothing to commit, working tree clean The previous cherry-pick is now empty, possibly due to conflict resolution. If you wish to commit it anyway, use: git commit --allow-empty If you wish to skip this commit, use: git reset Then "git cherry-pick --continue" will resume cherry-picking the remaining commits. error: last command exited with $?=1 not ok 2 - a variant of Brian's regression for cherry-pick These test should probably be squeezed into 't3508-cherry-pick-many-commits.sh', but Friday has just turned into Saturday around here, so that's enough from me for now. > Note that none of this happens with --no-edit; my reverts happen > smoothly, with no extra need for --continue. > > Regards, > Brian > > $ mkdir tmp > $ cd tmp > /tmp$ git init > Initialized empty Git repository in [...]/tmp/.git/ > /tmp$ touch foo > /tmp$ git add foo > /tmp$ echo bar >> foo > /tmp$ git commit -am baz > [master (root-commit) a388f78d9013] baz > 1 file changed, 1 insertion(+) > create mode 100644 foo > /tmp$ echo pow >> foo > /tmp$ git commit -am whizzbang > [master 51753222dd9a] whizzbang > 1 file changed, 1 insertion(+) > /tmp$ echo pop >> foo > /tmp$ git commit -am nothing > [master 7153607b11e0] nothing > 1 file changed, 1 insertion(+) > /tmp$ git revert HEAD HEAD^ > ## EDITOR pops up, as expected > [master 586469974ec2] Revert "nothing" > 1 file changed, 1 deletion(-) > On branch master > Revert currently in progress. > > nothing to commit, working tree clean > ## Unexpected, confusing pause? No prompt to '--continue' > /tmp$ git log --oneline > 586469974ec2 (HEAD -> master) Revert "nothing" > 7153607b11e0 nothing > 51753222dd9a whizzbang > a388f78d9013 baz > /tmp$ git status > On branch master > Revert currently in progress. > (run "git revert --continue" to continue) > (use "git revert --skip" to skip this patch) > (use "git revert --abort" to cancel the revert operation) > > nothing to commit, working tree clean > /tmp$ git revert --continue > ## EDITOR pops up, as expected > [master b8dd23f61d07] Revert "whizzbang" > 1 file changed, 1 deletion(-) > On branch master > Revert currently in progress. > > nothing to commit, working tree clean > ## Unexpected state; both reverts happened, but revert is still in progress? > /tmp$ git log --oneline > b8dd23f61d07 (HEAD -> master) Revert "whizzbang" > 586469974ec2 Revert "nothing" > 7153607b11e0 nothing > 51753222dd9a whizzbang > a388f78d9013 baz > /tmp$ git status > On branch master > Revert currently in progress. > (run "git revert --continue" to continue) > (use "git revert --skip" to skip this patch) > (use "git revert --abort" to cancel the revert operation) > > nothing to commit, working tree clean > ## OK...I'll run it one more time. > /tmp$ git revert --continue > /tmp$ git status > On branch master > nothing to commit, working tree clean > ## *Now* I'm done > /tmp$ git log --oneline > b8dd23f61d07 (HEAD -> master) Revert "whizzbang" > 586469974ec2 Revert "nothing" > 7153607b11e0 nothing > 51753222dd9a whizzbang > a388f78d9013 baz