Git interactive rebase without opening the editor

2019-01-23 14:50发布

Git allows certain commands to create or modify commits without opening the editor first, for example:

git commit --amend --no-edit
git commit --fixup=HEAD^

I have set rebase.autosquash to true, so that the todo list for an interactive rebase is automatically reordered. Is there a way to immediately perform the rebase, without opening the editor first, something like:

git rebase -i --no-edit HEAD~3

1条回答
ゆ 、 Hurt°
2楼-- · 2019-01-23 15:04

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.)

查看更多
登录 后发表回答