Fabian Ruch <bafain@xxxxxxxxx> writes: > Subject: rebase -i: reword complains about empty commit despite --keep-empty I had to read the title and then the log twice before understanding that the above is not "change the complaint message" (i.e. "reword complaints" spelled incorrectly) but is a description of the current behaviour (i.e. "the command complains when 'reword' is used on an empty commit") that is not accompanied by an evaluation ("ok, it complains; are you saying it is a good thing or a bad thing?") or an action ("if it is a bad thing, what are you doing about it?"). Perhaps rebase -i: allow rewording an empty commit or something? > The to-do list command `reword` replays a commit like `pick` but lets > the user also edit the commit's log message. If `--keep-empty` is > passed as option to git-rebase--interactive, empty commits ought to > be replayed without complaints. However, if the users chooses to > reword an empty commit by changing the respective to-do list entry > from > > pick fa1afe1 Empty commit > > to > > reword fa1afe1 Empty commit > > , then git-rebase--interactive suddenly fails to replay the empty > commit. This is especially counterintuitive because `reword` is > thought of as a `pick` that alters the log message in some way but > nothing more and the unchanged to-do list entry would not fail. > > Handle `reword` by cherry-picking the named commit and editing the > log message using > > git commit --allow-empty --amend > > instead of > > git commit --amend. > > Add test. > > Signed-off-by: Fabian Ruch <bafain@xxxxxxxxx> > --- > git-rebase--interactive.sh | 2 +- > t/t3404-rebase-interactive.sh | 8 ++++++++ > 2 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh > index e733d7f..689400e 100644 > --- a/git-rebase--interactive.sh > +++ b/git-rebase--interactive.sh > @@ -504,7 +504,7 @@ do_next () { > > mark_action_done > do_pick $sha1 "$rest" > - git commit --amend --no-post-rewrite ${gpg_sign_opt:+"$gpg_sign_opt"} || { > + git commit --allow-empty --amend --no-post-rewrite ${gpg_sign_opt:+"$gpg_sign_opt"} || { > warn "Could not amend commit after successfully picking $sha1... $rest" > exit_with_patch $sha1 1 > } > diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh > index 8197ed2..9931143 100755 > --- a/t/t3404-rebase-interactive.sh > +++ b/t/t3404-rebase-interactive.sh > @@ -75,6 +75,14 @@ test_expect_success 'rebase --keep-empty' ' > test_line_count = 6 actual > ' > > +test_expect_success 'rebase --keep-empty' ' > + git checkout emptybranch && > + set_fake_editor && > + FAKE_LINES="1 reword 2" git rebase --keep-empty -i HEAD~2 && > + git log --oneline >actual && > + test_line_count = 6 actual > +' > + > test_expect_success 'rebase -i with the exec command' ' > git checkout master && > ( -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html