Git interactive rebase without opening the editor

As an illustration of torek's solution (GIT_SEQUENCE_EDITOR=:) see Git 2.21 (Feb. 2019):

When GIT_SEQUENCE_EDITOR is set, the command was incorrectly started when modes of "git rebase" that implicitly uses the machinery for the interactive rebase are run, which has been corrected.

See commit 891d4a0 (28 Jan 2019) by Phillip Wood (phillipwood).
(Merged by Junio C Hamano -- gitster -- in commit 69dd6e5, 05 Feb 2019)

implicit interactive rebase: don't run sequence editor

If GIT_SEQUENCE_EDITOR is set then rebase runs it when executing implicit interactive rebases which are supposed to appear non-interactive to the user.
Fix this by setting GIT_SEQUENCE_EDITOR=: rather than GIT_EDITOR=:.


Git 2.29 (Q4 2020) documents that environment variable.

See commit 902a126 (31 Aug 2020) by Philippe Blain (phil-blain).
(Merged by Junio C Hamano -- gitster -- in commit ed9d833, 03 Sep 2020)

doc: mention GIT_SEQUENCE_EDITOR and 'sequence.editor' more

Signed-off-by: Philippe Blain

The environment variable GIT_SEQUENCE_EDITOR, and the configuration variable 'sequence.editor', which were added in 821881d88d ("rebase -i": support special-purpose editor to edit insn sheet, 2011-10-17), are mentioned in the [git config](https://github.com/git/git/blob/902a126eca2d46b34dab822f1a1861bc2ce3cf48/Documentation/git-config.txt)<sup>([man](https://git-scm.com/docs/git-config))</sup> man page but not anywhere else.

Add GIT_SEQUENCE_EDITOR to the list of environment variables in git.

git now includes in its man page:

GIT_SEQUENCE_EDITOR:

This environment variable overrides the configured Git editor when editing the todo list of an interactive rebase.
See also git rebase and the sequence.editor option in git config.


Instead of using the GIT_SEQUENCE_EDITOR environment variable, you can use -c to pass configuration to git:

git -c sequence.editor=: rebase --autosquash --interactive origin/master

Works well for triggering editor-free rebases from within your editor (i.e., using fugitive's :Git command in vim).


TL;DR answer: GIT_SEQUENCE_EDITOR=: git rebase -i HEAD~3

You can't stop git rebase --interactive from running the "sequence editor" (that's the edit command on the "sequence file" containing the various pick, etc., commands). However, if you examine the interactive rebase script:

$ vim $(git --exec-path)/git-rebase--interactive

you'll find code like this near line 230 or so:

git_sequence_editor () {
    if test -z "$GIT_SEQUENCE_EDITOR"
    then
        GIT_SEQUENCE_EDITOR="$(git config sequence.editor)"
        if [ -z "$GIT_SEQUENCE_EDITOR" ]
        then
            GIT_SEQUENCE_EDITOR="$(git var GIT_EDITOR)" || return $?
        fi
    fi

    eval "$GIT_SEQUENCE_EDITOR" '"$@"'
}

Thus, you simply need to set the sequence editor to an "edit" command that does nothing and then succeeds, such as the shell's built-in : command, or the true command.

(Any of $GIT_SEQUENCE_EDITOR, the configured sequence.editor, or $GIT_EDITOR will suffice for this, though the obvious best one to use is the first.)