Git rebase --continue如何在不打开编辑器的情况下执行?

9

在正常的变基冲突后调用git rebase --continue时,编辑器(GIT_EDITOR)会打开并要求修改提交消息。由于提交消息可能包含前导符号 # ,所以这可能会失败。

$ export GIT_EDITOR=true
$ git rebase --continue
Aborting commit due to empty commit message.
error: could not commit staged changes.

Git rebase文档中,有如下段落:

修改提交信息 当在变基过程中出现冲突时,变基会停止并要求用户解决。由于用户可能需要在解决冲突时进行重大更改,因此在冲突解决之后,用户运行git rebase --continue后,变基应该打开一个编辑器并要求用户更新提交信息。合并后端就是这样做的,而应用后端则盲目地应用原始提交信息

所以我尝试切换到应用后端,但它仍然失败了:
$ export GIT_EDITOR=true
$ git config rebase.backend apply
$ $ git config --list | grep backend
rebase.backend=apply
$ git rebase --continue
Aborting commit due to empty commit message.
error: could not commit staged changes.

如何强制Git盲目应用提交消息?

如果你想在提交信息中使用 #,那么你可能需要选择另一个字符来作为注释。但是我认为这仍然是一种有风险的做法。请参考这个问题core.commentChar=auto 可能会对你有所帮助。 - Joachim Sauer
2
在rebase过程中不能在中途切换后端程序:它是在rebase操作开始时选择的,从那时起,git rebase --continue将继续使用该特定的后端。然而,GIT_EDITOR=true技巧应该有效,我不确定为什么没有起作用。 - torek
很遗憾,git -c core.commentChar=auto rebase <commit> <branch> 也有同样的问题。 git -c rebase.backend=apply rebase <commit> <branch> 可以解决问题,但我想知道它是否会产生一些负面影响。毕竟 Git 默认使用合并而不是应用,肯定有其原因。 - Thomas S.
1个回答

4
我找到的一个解决方法是,指定从 .git/rebase-merge/message (这里是 @)检测到的core.commentChar
git -c core.commentChar=@ rebase --continue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接