Git:如何编辑/改写合并提交的消息?

如何编辑或改写合并提交的消息?

git commit --amend是最后一次提交( HEAD ),但是如果在HEAD之前呢?

git rebase -i HEAD~5没有列出合并提交。

如果将--preserve-merges选项(或其同义词-p )添加到git rebase -i命令中,则git会在重新绑定时尝试保留合并,而不是线性化历史logging,并且应该能够修改合并提交以及:

 git rebase -i -p HEAD~5 

请注意, 启动git1.7.9.6 (和git1.7.10 +), git merge本身将始终触发编辑器 ,为您添加细节到合并。

git merge $tag ”合并一个带注释的标签在交互式编辑会话期间总是打开编辑器。 v1.7.10系列引入了一个环境variablesGIT_MERGE_AUTOEDIT来帮助旧脚本拒绝这种行为,但是维护轨道也应该支持它。

它还引入了一个环境variablesGIT_MERGE_AUTOEDIT来帮助旧脚本拒绝这种行为。

请参阅“ 预测Git 1.7.10 ”:

最近在关于Git邮件列表的讨论中 ,Linus承认(我同意),这是我们在Git早期的devise错误之一。
在1.7.10及更高版本中,在交互式会话(即其标准input和连接到terminal的标准输出)中运行的git merge命令将在创build提交之前打开一个编辑器,以logging合并结果用户有机会解释合并,就像用户在解决冲突合并之后运行的git commit命令一样。

莱纳斯说:

但是我并不十分关心它是如何工作的 – 我的主要问题是git使得合并消息不好的情况变得容易。
我认为这是一个更简单的白痴: 我们甚至从来没有启动编辑器默认为“混帐合并”,但我们做一个“ git commit ”。
那是一个devise上的错误,这意味着如果你真的想把注释添加到合并中,你必须做额外的工作。 所以人们不会

另一个不错的答案只使用原始命令 – 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,让你等待未知的时间很好的“function”,直到GIT完成思考git rebase -p -i HEAD^^^^的情况下需要重新提交的提交列表git rebase -p -i HEAD^^^^ (这样的命令会导致最后一次提交合并的最后一个提交的列表,在我的情况下,在我的情况下花了大约50秒!)。

git rebase -i HEAD~5命令popup编辑器。 它列出了指定的提交(在这个例子中是五个)。 第一列包含每个提交的select。 只需在该编辑器中用rewordreplacepick并保存并closures编辑器即可。 然后git会popup编辑器的每个提交你改变pick reword ,并让你编辑提交信息。