在不打开编辑器的情况下进行Git交互式重定基础



Git允许某些命令在不首先打开编辑器的情况下创建或修改提交,例如:

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

我已经将rebase.autosquash设置为true,这样交互式重基本的待办事项列表就会自动重新排序。有没有一种方法可以在不首先打开编辑器的情况下立即执行重基,比如:

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

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

您无法阻止git rebase --interactive运行"序列编辑器"(即包含各种pick等命令的"序列文件"上的编辑命令)。但是,如果您检查交互式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" '"$@"'
}

因此,您只需将序列编辑器设置为一个"edit"命令,该命令什么都不做,然后成功,例如shell的内置:命令或true命令。

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

您可以使用-c将配置传递给git:,而不是使用GIT_SEQUENCE_EDITOR环境变量

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

适用于从编辑器中触发无编辑器重基线(即,在vim中使用逃亡者的:Git命令)。

作为torek解决方案(GIT_SEQUENCE_EDITOR=:)的示例,请参阅Git 2.21(2019年2月):

GIT_SEQUENCE_EDITOR被设置时;git rebase";它隐式地使用了交互式rebase运行的机制,该机制已被更正。

参见Phillip Wood提交的891d4a0(2019年1月28日)(phillipwood
(由Junio C Hamano合并——gitster——于2019年2月5日提交69dd6e5)

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

如果设置了GIT_SEQUENCE_EDITOR,则rebase在执行时运行它应该出现的隐式交互式数据库对用户而言是非交互式的
通过设置GIT_SEQUENCE_EDITOR=:而不是GIT_EDITOR=:. 来解决此问题


Git 2.29(2020年第四季度)记录了该环境变量。

请参阅Philippe Blain(phil-blain)提交的902a126(2020年8月31日)
(由Junio C Hamano合并——gitster——于2020年9月3日提交ed9d833)

doc:更多提及GIT_SEQUENCE_EDITOR和'sequence.editor'

签字人:Philippe Blain

821881d88d中添加的环境变量GIT_SEQUENCE_EDITOR和配置变量"sequence.editor"("rebase -i":支持专用编辑器编辑insn-sheet,2011-10-17)在[ git-config ](https://github.com/git/git/blob/902a126eca2d46b34dab822f1a1861bc2ce3cf48/Documentation/git-config.txt)<sup>([man](https://git-scm.com/docs/git-config))</sup> 手册页中有所提及,但在其他任何地方都没有提及。

GIT_SEQUENCE_EDITOR添加到git中的环境变量列表中。

git现在在其手册页中包括:

GIT_SEQUENCE_EDITOR

此环境变量覆盖配置的Git编辑器当编辑交互式rebase的todo列表时
另请参阅git config中的git rebasesequence.editor选项。

最新更新