Re: [PATCH RFC v2 02/19] rebase -i: reword complains about empty commit despite --keep-empty
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 8, 2014, 20:37 UTC
- Message-ID
- <xmqqpphf8u3x.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <b7ee74ddb785f0e087b30ca6be11723ca199fa03.1404323078.git.bafain@gmail.com>
Fabian Ruch <bafain@gmail.com> 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?
Show 67 quoted lines
> 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@gmail.com>
> ---
> 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 &&
> (