我很高兴使用 vim 作为我的默认提交编辑器,并且不想更改它。然而,当谈到变基时,我发现自己压缩了几十个提交,我发现使用像 Textwrangler 这样的交互式编辑器更容易(在除了顶部提交之外的所有提交中用“squash”替换“pick”)。
有没有办法为一次性 rebase 命令指定备用编辑器?
我知道在 vim 中我可以做到:
:%s/pick/squash/
但这也有它自己的小烦恼。
编辑 - 如评论中所述,您可以通过转到第二行并执行来非常有效地压缩除顶部提交之外的所有提交
:,$s/pick/squash/
(注意逗号和美元与原文不同)
尝试在命令之前添加
GIT_EDITOR
环境变量,如下所示:
GIT_EDITOR=<editor of choice> git rebase <...>
例如,要使用
nano
,我会输入:
GIT_EDITOR=nano git rebase -i abcdef1234
对于所有交互式变基,还有一个更好的选择。
https://github.com/sjurba/rebase-editor
它是一个用 Node 编写的自定义 CLI 应用程序,专门用于交互式变基。
安装:
npm install -g rebase-editor
git config --global sequence.editor rebase-editor
或用纱线:
yarn global add rebase-editor
git config --global sequence.editor rebase-editor
git var GIT_EDITOR
”(man)”抽象了复杂的逻辑来选择背后使用哪个编辑器,“git var
”现在支持 GIT_SEQUENCE_EDITOR
.
请参阅 Sean Allred (vermiculus
)
的commit 4c3dd93(2022 年 12 月 17 日)。
gitster
-- 合并于 commit 48475f4,2022 年 12 月 28 日)
:添加var
变量GIT_SEQUENCE_EDITOR
签署人:Sean Allred
Git 在编辑序列器“todo”文件时使用的编辑器程序是通过检查一些环境变量来确定的,并且还受配置变量的影响。
引入“”(man)”让用户无需了解具体细节即可访问逻辑的最终结果。git var GIT_SEQUENCE_EDITOR
这在精神上与引入“
git var
”的44fcb49(TeachaboutGIT_EDITOR
git var GIT_EDITOR
,2009-11-11,Git v1.6.6-rc0 -merge)非常相似。
git var
现在包含在其 手册页中:
GIT_SEQUENCE_EDITOR
文本编辑器用于在运行时编辑“todo”文件
。与git rebase -i
一样,该值的解释方式是 使用时的外壳。GIT_EDITOR
优先顺序是:
- 那个
环境变量,然后$GIT_SEQUENCE_EDITOR
配置,然后sequence.editor
的值。git var GIT_EDITOR
就我而言,我设置了一个用于变基的交互式编辑器。但是,我发现它无法执行我想要的操作,因此,如果我想为偶尔的调用指定替代编辑器,则可以执行以下操作:
git -c sequence.editor=vim rebase -i upstream/main
-c sequence.editor=<value>
设置该单个命令的 sequence.editor
配置键的值。您可以对任何命令使用此语法,并且它有时会派上用场。