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

时间:2015-03-17 08:43:25

标签: git rebase git-rebase

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

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

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

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

3 个答案:

答案 0 :(得分:20)

TL; DR回答: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都可以满足要求,但最明显的最佳选择是第一个。)

答案 1 :(得分:1)

有关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日)

  

隐式交互式变基:不要运行序列编辑器

     

如果设置了GIT_SEQUENCE_EDITOR,则在执行时rebase将运行它   应该出现的隐式交互式基础   与用户不互动。
  通过设置GIT_SEQUENCE_EDITOR=:而非GIT_EDITOR=:.

来解决此问题

答案 2 :(得分:1)

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

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

非常适合从编辑器中触发无编辑器的变基(即,在 vim 中使用逃犯的 :Git 命令)。