Answers:
如果您在命令中添加--preserve-merges
选项(或它的同义词,-p
),git rebase -i
则git将在重新设置基准时尝试保留合并,而不是线性化历史记录,并且您也应该能够修改合并提交:
git rebase -i -p HEAD~5
HEAD~5
您要修改的提交的父级在哪里(通常为sha1 ^)。
--preserve-merges
就是现在 --rebase-merges
请注意,从git1.7.9.6(和git1.7.10 +)开始,git merge
它本身总是会触发编辑器,以便您向合并中添加详细信息。
git merge $tag
合并带注释的标签的“ ”始终在交互式编辑会话期间打开编辑器。v1.7.10系列引入了一个环境变量GIT_MERGE_AUTOEDIT来帮助较早的脚本拒绝这种行为,但是维护轨道也应该支持它。
它还引入了一个环境变量GIT_MERGE_AUTOEDIT
来帮助较早的脚本拒绝这种行为。
请参阅“ 预期Git 1.7.10 ”:
最近,在有关Git邮件列表的讨论中,Linus承认(我同意),这是我们在Git历史的早期犯下的设计错误之一。
在1.7.10及更高版本中,在交互式会话中运行的git merge命令(即,其标准输入和连接至终端的标准输出)将在创建用于记录合并结果的提交之前打开编辑器,以给出用户有机会解释合并,就像git commit命令一样,用户在解决冲突合并后就已经运行了。
莱纳斯说:
但是我并不十分在意它的实际工作原理-我的主要问题是git使得合并不良消息变得太容易了。
我认为其中一部分是更简单的白痴:默认情况下,我们甚至从不为“ git merge”启动编辑器,但为“git commit
” 做准备。
那是一个设计错误,这意味着如果您想在合并中实际添加注释,则必须做额外的工作。所以人们没有。
请注意,在Git 2.17(2018年第二季度)之前,“ git rebase -p
”破坏了合并提交的日志消息,该消息现已修复。
参见Gregory Herrero(``)的commit ed5144d(2018年2月8日)。
建议者:Vegard Nossum(vegard
)和Quentin Casasnovas(casasnovas
)。
(通过合并JUNIOÇ滨野- gitster
-在提交8b49408,2018年2月27日)
rebase -p
:修复调用时错误的提交信息git merge
。由于commit dd6fb00(“
rebase -p
:修复调用时的引用git merge
”,2018年1月,Git 2.16.0-rc2),因此,将基于执行'git rev-parse --sq-quote
' 的子外壳将要重新建立基础的合并提交的提交消息传递给merge命令。在此子shell周围需要双引号,以便为
git merge
命令。在此修补程序之前,以下合并消息:
"Merge mybranch into mynewbranch Awesome commit."
变成:
"Merge mybranch into mynewbranch Awesome commit."
经过一段时间
rebase -p
。
在Git 2.23(2019年第二季度)中,“ merge -c
”期间的“ ”指令git rebase --rebase-merges
应使用户有机会编辑日志消息,即使在其他情况下无需创建新合并并替换现有合并(例如,快进代替) ),但没有。
已更正。
参见Phillip Wood()的commit 6df8df0(2019年5月2日)。(通过合并JUNIOÇ滨野- -在提交c510261,2019年6月13日)phillipwood
gitster
另一个仅使用原始命令的好答案-通过knittl https://stackoverflow.com/a/7599522/94687:
git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch
或更好(更正确)的最终rebase命令:
git rebase <sha of merge> previous_branch --onto HEAD
顺便说一句,使用原始命令可能会具有很好的“功能”,即不会消耗过多的CPU,并且让您等待未知的时间,直到Git完成考虑需要重新提交的提交列表git rebase -p -i HEAD^^^^
(例如,这样的命令会导致仅4次最后一次提交与合并的列表,就我而言,最后一次提交大约花费了50秒!)。
对于当前的Git版本(Mai 2020):
git rebase -i -r <parent>
,
然后在编辑器merge -C ...
中用替换merge -c ...
。
在重新定级期间,这将在编辑器中打开提交消息,您可以在其中进行更改。
! [rejected] HEAD -> master (non-fast-forward)error: failed to push some refs to