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 rebase
和sequence.editor
选项。