Git允许某些命令在不先打开编辑器的情况下创建或修改提交,例如:
git commit --amend --no-edit
git commit --fixup=HEAD^
我已将rebase.autosquash
设置为true
,因此交互式rebase的待办事项列表会自动重新排序。有没有办法立即执行rebase,而无需先打开编辑器,如:
git rebase -i --no-edit HEAD~3
答案 0 :(得分:20)
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)
有关torek的solution(GIT_SEQUENCE_EDITOR=:
)的说明,请参见Git 2.21(2019年2月):
设置GIT_SEQUENCE_EDITOR
时,运行隐式使用机器进行交互式rebase的“ git rebase”模式时,该命令被错误启动。
请参见commit 891d4a0的Phillip 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
命令)。