Git交互式rebase而无需打开编辑器

问题描述 投票:17回答:2

Git允许某些命令创建或修改提交而无需先打开编辑器,例如:

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

我已将rebase.autosquash设置为true,因此交互式rebase的待办事项列表会自动重新排序。有没有办法立即执行rebase,而无需先打开编辑器,如下所示:

git rebase -i --no-edit HEAD~3
git rebase git-rebase
2个回答
25
投票

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

你无法阻止git rebase --interactive运行“序列编辑器”(这是包含各种选择等命令的“序列文件”上的编辑命令)。但是,如果您检查交互式rebase脚本:

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

你会在第230行左右找到这样的代码:

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" '"$@"'
}

因此,您只需将序列编辑器设置为“编辑”命令,该命令不执行任何操作然后成功,例如shell的内置:命令或true命令。

$GIT_SEQUENCE_EDITOR,配置的sequence.editor$GIT_EDITOR中的任何一个都足以满足这一要求,尽管明显最好使用的是第一个。)


2
投票

作为toreksolutionGIT_SEQUENCE_EDITOR=:)的例证,参见Git 2.21(2019年2月):

设置GIT_SEQUENCE_EDITOR时,在运行隐式使用交互式rebase的机制的“git rebase”模式时,该命令被错误地启动,该模式已被更正。

参见commit 891d4a0Phillip Wood (phillipwood)(2019年1月28日)。 (由Junio C Hamano -- gitster --合并于commit 69dd6e5,2019年2月5日)

隐式交互式rebase:不运行序列编辑器

如果设置了GIT_SEQUENCE_EDITOR,那么rebase在执行隐式交互式rebase时运行它,这些rebase应该对用户显得非交互式。 通过设置GIT_SEQUENCE_EDITOR=:而不是GIT_EDITOR=:.来解决这个问题

© www.soinside.com 2019 - 2024. All rights reserved.