【问题标题】:git rebase --editor=/something/other/than/vim? (for easier squashing)git rebase --editor=/something/other/than/vim? (为了更容易压扁)
【发布时间】:2013-10-31 18:18:24
【问题描述】:

我很乐意使用 vim 作为我的默认提交编辑器,并且不想更改它。然而,当涉及到变基时,我发现自己压缩了几十个提交,我发现使用 Textwrangler 之类的交互式编辑器更容易(除了顶部提交之外的所有内容都用“squash”替换“pick”)。

有没有办法为一次性变基命令指定一个备用编辑器?

我知道在 vim 中我可以做到:

:%s/pick/squash/

但这也有它自己的小烦恼。

编辑 - 如 cmets 所述,您可以通过转到第二行并执行来非常有效地压缩除顶部提交之外的所有提交

:,$s/pick/squash/

(注意逗号和美元与原文不同)

【问题讨论】:

  • 在 vim 中,您可以使用 :,$s/pick/squash/ 来更改从 当前行 到文件末尾的所有匹配项。
  • 这是一个很好的提示,谢谢 Greg。是的,这就是我所暗示的“小烦恼”。
  • 假设你有最新的 vim 版本或安装了 Tim Pope 的 vim-git 插件,你可以使用:Cycle:Squash 命令。您甚至可能想要使用映射。也许使用:global 命令::+,$g/./Squash
  • 请问:Cycle 和:Squash 是做什么的?我无法找到这些命令的文档。
  • 我也大量使用“标记”。转到要更改的第一行,键入ma(设置标记a),转到要更改的最后一行,键入:'a,.s/this/that/。单引号后跟一个标记字母表示“设置该标记的行”。

标签: git vim editor git-rebase


【解决方案1】:

尝试在您的命令之前添加GIT_EDITOR 环境变量,如下所示:

GIT_EDITOR=<editor of choice> git rebase <...>

例如,要使用nano,我会输入:

GIT_EDITOR=nano git rebase -i abcdef1234

【讨论】:

  • 由于您没有导出它,因此该变量值会在命令终止时重置吗? (这将是理想的,但我猜你需要手动重置它)
  • 该变量仅针对该命令调用设置。尝试在不使用GIT_EDITOR 的情况下再次运行git rebase,您将再次使用默认编辑器。
  • 太棒了,这是正确的答案。虽然我认为我对学习更多 vim 的恐惧是不合理的
  • 确实很棒。出于某种原因,我古老的服务器端操作系统默认为vi 而不是vim——所以现在我知道如何永久修复这个问题了。
  • 这对我很有帮助,谢谢,我相信很多人都在寻找 GIT_EDITOR=nano git rebase -i @~9 这将显示你最近的九次提交,你应该可以修改它们。
【解决方案2】:

对于所有交互式 rebase,有一个更好的选择。

https://github.com/sjurba/rebase-editor

这是一个用 node 编写的自定义 CLI 应用程序,专门用于交互式 rebase。

安装:

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 rebase”成为一个可教的过程。
猜你喜欢
  • 2016-05-10
  • 2018-06-29
  • 2015-01-15
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 2011-07-12
相关资源
最近更新 更多