我经常重新调整交互式基础,以对历史记录进行微小的更改(例如删除空白行或编辑一行)。在大多数情况下,这些更改是基于一些同行评审。
一开始我是这样做的:
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配置:
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
就足以继续变基而不需要弹出编辑器。
在 PowerShell 中,使用:
$env:GIT_EDITOR = "true -and git rebase --continue"
然后整理
$env:GIT_EDITOR = ""
这种方法:
指定从 .git/rebase-merge/message 检测到的 core.commentChar(此处为@):还有,但你不能总是将其保留在该值,因为这会破坏你想要编辑器的所有变基操作。 这就是为什么使用别名仍然是最灵活和准确的方法,而不是依赖于可能会破坏其他变基编辑器用例的全局设置。
git --global core.commentChar @
true
作为编辑器的技巧也可以通过像这样的 git 别名来完成:
[alias]
continue = "-c core.editor=true rebase --continue"
然后使用 git continue
而不是
git rebase --continue
。
git -c config.editor= rebase --continue