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

时间:2011-09-02 04:18:41

标签: git commit amend

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

git commit --amend如果是最后一次提交(HEAD),则会有效,但如果它出现在HEAD之前会怎样?

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

8 个答案:

答案 0 :(得分:175)

如果您将--preserve-merges选项(或其同义词,-p)添加到git rebase -i命令,那么git将尝试在重新定位时保留合并,而不是线性化历史记录,以及你也应该能够修改合并提交:

git rebase -i -p HEAD~5

答案 1 :(得分:28)

请注意,starting git1.7.9.6(和git1.7.10 +), git merge本身将始终触发编辑器,以便您向合并添加详细信息。

  

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

它还引入了一个环境变量 GIT_MERGE_AUTOEDIT ,以帮助旧脚本拒绝此行为。

请参阅“Anticipating Git 1.7.10”:

  

最近在discussion on the Git mailing list,Linus承认(并且我同意)这是我们在Git历史早期所犯的设计错误之一。
  在1.7.10及更高版本中,在交互式会话中运行的git merge命令(即它的标准输入和连接到终端的标准输出)将在创建提交以记录合并结果之前打开编辑器,用户有机会解释合并,就像用户在解决冲突合并后运行的git commit命令一样。

Linus说:

  

但是我并不十分关心它是如何工作的 - 我的主要问题是git使得合并消息很容易变得太容易了。
  我认为其中一部分是一个更简单的白痴:默认情况下,我们甚至从未启动编辑器进行“git merge”,但我们选择“git commit”。   这是一个设计错误,这意味着如果你想真正为合并添加一个注释,你必须做额外的工作。所以人们不


请注意,在Git 2.17(2018年第二季度)之前,“git rebase -p”合并提交的错误日志消息现已修复。

commit ed5144dGregory Herrero (``)(2018年2月8日) 建议:Vegard Nossum (vegard)Quentin Casasnovas (casasnovas)
Junio C Hamano -- gitster --于2018年2月27日commit 8b49408合并)

  

rebase -p:在调用git merge时修复错误的提交消息。

     

commit dd6fb00(“rebase -p:在调用git merge时修复引用”,2018年1月,Git 2.16.0-rc2)以来,传递了合并提交的提交消息使用执行“git rev-parse --sq-quote”的子shell进行合并命令。

     

围绕此子shell需要双引号,以便换行符   为git merge命令保留。

     

在此补丁之前,请遵循合并消息:

"Merge mybranch into mynewbranch

Awesome commit."
     

变为:

"Merge mybranch into mynewbranch Awesome commit."
     

之后的rebase -p

答案 2 :(得分:6)

使用原始命令的另一个好答案 - 由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
BTW,使用原始命令可能会有很好的功能&#34;不要消耗太多的CPU并让你等待未知的时间,直到Git完成在git rebase -p -i HEAD^^^^的情况下完成需要重新设置的提交列表(这样的命令将导致仅列出4个最后提交的列表)在我的情况下,合并作为我的情况下的最后一个花了大约50秒!)。

答案 3 :(得分:5)

自 2021 年起更新,-p 已弃用。

改用 --rebase-merges

答案 4 :(得分:2)

对于当前的Git版本(2020年以上),只需执行git rebase -i -r <parent>, 然后在编辑器merge -C中将其替换为merge -c。在重新定级期间,这将在编辑器中打开合并提交的消息,您可以在其中进行更改(感谢VonChint)。

答案 5 :(得分:2)

使用--rebase-merges(或缩短的-r)标志:

git rebase -i -r HEAD~5

然后将要更改的提交旁边的'pick'文本更改为'edit'或'reword':

pick <commit-hash-to-leave> <message>
edit <commit-hash-to-change> <message>

--rebase-merges标志替换了已弃用的--preserve-merges(或缩短的-p

文档:https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt--r

答案 6 :(得分:1)

git merge --edit
即使在非交互式合并的情况下,也允许您发表评论。

git merge --edit --no-ff 如果你在开发分支上跟随git flow并在没有快进的情况下合并到它中就会很有用。

答案 7 :(得分:-1)

git rebase -i HEAD~5命令会弹出编辑器。它列出了指定的提交(在这种情况下为五个)。每个提交的第一列包含pick。只需在该编辑器中将pick替换为reword,然后保存+关闭编辑器即可。然后git将为您将pick更改为reword的每个提交弹出编辑器,并允许您编辑提交消息。