不打开编辑器的Git interactive rebase

不打开编辑器的Git interactive rebase,git,rebase,git-rebase,Git,Rebase,Git Rebase,Git允许某些命令在不首先打开编辑器的情况下创建或修改提交,例如: git commit --amend --no-edit git commit --fixup=HEAD^ 我已将rebase.autosquash设置为true,以便自动重新排序交互式rebase的待办事项列表。有没有一种方法可以在不首先打开编辑器的情况下立即执行重基,例如: git rebase -i --no-edit HEAD~3 TL;DR回答:GIT\u序列编辑器=:GIT-rebase-i头~3 您不能停止运行

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

git commit --amend --no-edit
git commit --fixup=HEAD^
我已将
rebase.autosquash
设置为
true
,以便自动重新排序交互式rebase的待办事项列表。有没有一种方法可以在不首先打开编辑器的情况下立即执行重基,例如:

git rebase -i --no-edit HEAD~3
TL;DR回答:
GIT\u序列编辑器=:GIT-rebase-i头~3
您不能停止运行“序列编辑器”(这是包含各种拾取等命令的“序列文件”上的编辑命令)。但是,如果检查交互式重新基准脚本:

$ 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
都可以满足这一要求,尽管显然最好使用的是第一个编辑器。)

作为s(
GIT_SEQUENCE_EDITOR=:
)的示例,请参见GIT 2.21(2019年2月):

当设置了
GIT_SEQUENCE_EDITOR
时,当运行隐式使用交互重基机制的“GIT-rebase”模式时,该命令被错误地启动,这已得到纠正

参见作者(2019年1月28日)
(于2019年2月5日合并)

隐式交互重基:不运行序列编辑器 如果设置了
GIT\u SEQUENCE\u EDITOR
,则在执行时rebase将运行它 应该出现的隐式交互回退 与用户不交互。
通过设置
GIT\u序列编辑器=:
而不是
GIT\u编辑器=::。


Git2.29(2020年第4季度)记录了该环境变量

参见(2020年8月31日)作者 (于2020年9月3日合并)

:提及
GIT\u SEQUENCE\u编辑器
和'
SEQUENCE.EDITOR
'更多信息 签字人:Philippe Blain

在(“
rebase-i
”:支持专用编辑器编辑insn表,2011-10-17)中添加的环境变量
GIT\u SEQUENCE\u EDITOR
,以及配置变量“
SEQUENCE.EDITOR
”)在
[/code>GIT config
](https://github.com/git/git/blob/902a126eca2d46b34dab822f1a1861bc2ce3cf48/Documentation/git-config.txt)([男](https://git-scm.com/docs/git-config))
手册页,但不在其他任何地方

GIT\u SEQUENCE\u编辑器添加到
GIT
中的环境变量列表中

git
现在在其

GIT序列编辑器
此环境变量覆盖已配置的Git编辑器 编辑交互式重新基准的待办事项列表时。
另请参见
git-rebase
git-config
中的
sequence.editor
选项


我很好奇,你为什么不想要编辑器?@TimCastelijns可能用于服务器端的批处理操作。问题是,为什么
--autosquash
需要
--interactive
…这会阻止它运行,但这并不等同于运行编辑器并键入
:wq
--也就是说,编辑器没有运行,但rebase没有完成。我在一个git别名中运行它到一个shell函数,如果这很重要的话:
cadd=“!f(){git commit--fixup=$1;git_SEQUENCE_EDITOR=:git rebase-I--autosquash$1^;};f”
@Jonah:Odd…你有详细的例子吗?