]> git.ipfire.org Git - thirdparty/git.git/commit - sequencer.c
rebase -i: always update HEAD before rewording
authorPhillip Wood <phillip.wood@dunelm.org.uk>
Mon, 19 Aug 2019 09:18:21 +0000 (02:18 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 19 Aug 2019 22:27:09 +0000 (15:27 -0700)
commit450efe2d53b67f67b5efc11172ed0706cbd4f776
tree1ccf49fd1b35684d7baa0bbcc7bf1a0d322a4dd2
parent4d8ec15c66f32e29e4dfcdf64d0826c425d8ad7d
rebase -i: always update HEAD before rewording

If the user runs git log while rewording a commit it is confusing if
sometimes we're amending the commit that's being reworded and at other
times we're creating a new commit depending on whether we could
fast-forward or not[1]. Fix this inconsistency by always committing the
picked commit and then running 'git commit --amend' to do the reword.

The first commit is performed by the sequencer without forking git
commit and does not impact on the speed of rebase. In a test rewording
100 commits with

    GIT_EDITOR=true GIT_SEQUENCE_EDITOR='sed -i s/pick/reword/' \
../bin-wrappers/git rebase -i --root

and taking the best of three runs the current master took
957ms and with this patch it took 961ms.

This change fixes rewording the new root commit when rearranging commits
with --root.

Note that the new code no longer updates CHERRY_PICK_HEAD after creating
a root commit - I'm not sure why the old code was that creating that ref
after a successful commit, everywhere else it is removed after a
successful commit.

[1] https://public-inbox.org/git/xmqqlfvu4be3.fsf@gitster-ct.c.googlers.com/T/#m133009cb91cf0917bcf667300f061178be56680a

Reported-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sequencer.c
t/t3404-rebase-interactive.sh
t/t7505-prepare-commit-msg-hook.sh
t/t7505/expected-rebase-i