如何抑制`git rebase --continue`的编辑器?

问题描述 投票:0回答:3

我经常重新调整交互式基础,以对历史记录进行微小的更改(例如删除空白行或编辑一行)。在大多数情况下,这些更改是基于一些同行评审。

一开始我是这样做的:

git rebase --interactive 83bbeb27fcb1b5e164318fa17c55b7a38e5d3c9d~
# replace "pick" by "edit" on the first line
# modify code
git commit --all --amend --no-edit
git rebase --continue

如果以下提交之一存在合并冲突,我会解决它们并执行以下操作:

git rebase --continue
# the commit message is shown, but does not have to be changed, so I just save and exit the editor
git rebase --continue
# the commit message is shown, but does not have to be changed, so I just save and exit the editor
git rebase --continue
# the commit message is shown, but does not have to be changed, so I just save and exit the editor
...

有没有类似

--no-edit
参数的
git rebase --continue
可以避免编辑器(类似于
git commit
)?

git macos command-line git-rewrite-history
3个回答
72
投票

第一种方法,通过Git配置:

git -c core.editor=true rebase --continue

或者,使用环境变量:

GIT_EDITOR=true git rebase --continue

这将覆盖

git
用于消息确认的编辑器。
true
命令仅以零退出代码结束。它使
git
继续
rebase
,就好像用户关闭了交互式编辑器一样。

在 Windows 上,您需要 使用

CMD /V /C

cmd /V /C "set "GIT_EDITOR=true" && git rebase --continue

在这两个操作系统中,您都可以使用别名

# Linux
alias grc='GIT_EDITOR=true git rebase --continue'

# Windows
doskey grc=cmd /V /C "set "GIT_EDITOR=true" && git rebase --continue"

然后一个简单的

grc
就足以继续变基而不需要弹出编辑器。


David Gardiner 添加了评论

在 PowerShell 中,使用:

$env:GIT_EDITOR = "true -and git rebase --continue"
然后整理

$env:GIT_EDITOR = ""


要全局设置(没有别名),也许可以考虑

这种方法

指定从 .git/rebase-merge/message 检测到的 core.commentChar(此处为@):

git --global core.commentChar @

还有

GIT_SEQUENCE_EDITOR=:

,但你不能总是将其保留在该值,因为这会破坏你想要编辑器的所有变基操作。

这就是为什么使用别名仍然是最灵活和准确的方法,而不是依赖于可能会破坏其他变基编辑器用例的全局设置。


19
投票
使用

true

 作为编辑器的技巧也可以通过像这样的 git 别名来完成:

[alias] continue = "-c core.editor=true rebase --continue"
然后使用 

git continue

 而不是 
git rebase --continue


0
投票
暂时清除配置键config.editor:

git -c config.editor= rebase --continue
    
© www.soinside.com 2019 - 2024. All rights reserved.