@@ -2510,9 +2510,8 @@ static int do_pick_commit(struct repository *r,
*check_todo = !!(flags & EDIT_MSG);
if (!res && reword) {
fast_forward_edit:
- res = run_git_commit(NULL, opts, EDIT_MSG |
- VERIFY_MSG | AMEND_MSG |
- (flags & ALLOW_EMPTY));
+ flags = EDIT_MSG | VERIFY_MSG | AMEND_MSG | ALLOW_EMPTY;
+ res = run_git_commit(NULL, opts, flags);
*check_todo = 1;
}
}
@@ -791,6 +791,20 @@ test_expect_success 'reword' '
grep "C changed" actual
'
+test_expect_success 'reword fast-forwarded empty commit' '
+ git commit --allow-empty -m "empty commit" --only &&
+ (
+ set_fake_editor &&
+ FAKE_COMMIT_AMEND=edited FAKE_LINES="reword 1" \
+ git rebase -i HEAD^
+ ) &&
+ test_commit_message HEAD <<-\EOF
+ empty commit
+
+ edited
+ EOF
+'
+
test_expect_success 'no uncommitted changes when rewording and the todo list is reloaded' '
git checkout E &&
test_when_finished "git checkout @{-1}" &&
@@ -610,4 +610,24 @@ test_expect_success 'truncate label names' '
grep "label 0123456789-$" out
'
+test_expect_success 'reword fast-forwarded empty merge commit' '
+ oid="$(git commit-tree -m "D1" -p A D^{tree})" &&
+ oid="$(git commit-tree -m "empty merge" -p D -p $oid D^{tree})" &&
+
+ write_script sequence-editor.sh <<-\EOF &&
+ sed /^merge/s/-C/-c/ "$1" >"$1.tmp"
+ mv "$1.tmp" "$1"
+ EOF
+
+ (
+ test_set_sequence_editor "$(pwd)/sequence-editor.sh" &&
+ GIT_EDITOR="echo edited >>" git rebase -i -r D $oid
+ ) &&
+ test_commit_message HEAD <<-\EOF
+ empty merge
+
+ edited
+ EOF
+'
+
test_done