ma1*_*w28 135 git commit git-amend
如何编辑或重新编写合并提交的消息?
git commit --amend如果它是最后一次提交make(HEAD),那么它会起作用,但如果它出现之前HEAD呢?
git rebase -i HEAD~5 没有列出合并提交.
Mar*_*air 185
如果您将该--preserve-merges选项(或其同义词-p)添加到git rebase -i命令,那么git将尝试在重新定位时保留合并,而不是线性化历史记录,您应该也能够修改合并提交:
git rebase -i -p HEAD~5
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 30
请注意,启动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(``)提交ed5144d(2018年2月8日).
建议:Vegard Nossum(vegard)和Quentin Casasnovas(casasnovas).
(由Junio C gitsterHamano合并- -在提交8b49408,2018年2月27日)
rebase -p:调用时修复错误的提交消息git merge.自提交dd6fb00("
rebase -p:在调用时修复引用git merge",2018年1月,Git 2.16.0-rc2)以来,使用子shell执行'git rev-parse --sq-quote' 将重新绑定的合并提交的提交消息传递给merge命令.此子shell周围需要双引号,以便为
git merge命令保留换行符.在此补丁之前,遵循合并消息:
Run Code Online (Sandbox Code Playgroud)"Merge mybranch into mynewbranch Awesome commit."变为:
Run Code Online (Sandbox Code Playgroud)"Merge mybranch into mynewbranch Awesome commit."经过
rebase -p.
另一个仅使用原始命令的好答案-通过knittl /sf/answers/531966571/:
git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch
Run Code Online (Sandbox Code Playgroud)
或更好(更正确)的最终rebase命令:
git rebase <sha of merge> previous_branch --onto HEAD
Run Code Online (Sandbox Code Playgroud)
顺便说一句,使用原始命令可能会具有很好的“功能”,即不会消耗太多的CPU,并且让您等待未知的时间,直到Git完成考虑需要重新提交的提交列表git rebase -p -i HEAD^^^^(例如,这样的命令会导致仅4次最后一次提交与合并的列表,就我而言,最后一次提交大约花费了50秒!)。
使用--rebase-merges(或缩写的-r)标志:
git rebase -i -r HEAD~5
Run Code Online (Sandbox Code Playgroud)
然后将要更改的提交旁边的“pick”文本更改为“edit”或“reword”:
pick <commit-hash-to-leave> <message>
edit <commit-hash-to-change> <message>
Run Code Online (Sandbox Code Playgroud)
--rebase-merges(或缩短的)标志-r取代了不推荐使用的
--preserve-merges(或缩短的-p)
文档:https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt--r
git merge --edit
即使在非交互式合并的情况下也允许您给出评论。
git merge --edit --no-ff
如果您遵循 git flow 并在开发分支上重新建立基础并在没有快进的情况下合并到其中,这会很有用。