Re: git 2.24: git revert <commit1> <commit2> requires extra '--continue'?
From: SZEDER Gábor <hidden>
Date: 2019-11-23 00:35:02
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 [off-list ref]
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 [off-list ref]
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