如何编辑或重新编写合并提交的消息?
git commit --amend
如果是最后一次提交(HEAD
),则会有效,但如果它出现在HEAD
之前会怎样?
git rebase -i HEAD~5
未列出合并提交。
答案 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 ed5144d见Gregory 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
。在重新定级期间,这将在编辑器中打开合并提交的消息,您可以在其中进行更改(感谢VonC的hint)。
答案 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
的每个提交弹出编辑器,并允许您编辑提交消息。