我使用git进行本地工作(并且非常喜欢它),我遵循类似于this article中描述的工作流程。所以基本上,当开始一个新功能时,我为它创建一个分支,经历通常的hack然后提交循环,当我认为我已经完成它时,我使用git rebase --interactive master
将其压缩到一个提交中,我总是把大量的提交消息编辑成文章中的例子,在这里转载:
[#3275] User Can Add A Comment To a Post
* Adding Comment model, migrations, spec
* Adding Comment controller, helper, spec
* Adding Comment relationship with Post
* Comment belongs to a User
* Comment form on Post show page
当然,这是在一堆删除# This is the xth commit message
行并在每个提交消息前复制/粘贴*
之后。
现在,我想知道,有没有办法自定义git rebase -i如何输出压缩的提交消息所以我不必做所有的黑客攻击?
(我使用msysgit,如果重要的话。我的编辑器是Notepad ++。)
谢谢!
答案 0 :(得分:9)
启动Git 2.6+(2015年第3季度),实际上有一种方法可以配置git rebase -i commit消息。
commit 16cf51c见Michael Rappazzo (rappazzo
)(2015年6月13日)
(由Junio C Hamano -- gitster
--合并于commit 9f56db7,2015年8月3日)
git-rebase--interactive.sh
:为自定义指令格式添加配置选项配置选项“
rebase.instructionFormat
”可以覆盖rebase指令列表的默认“oneline
”格式。由于使用左,右或边界标记加上sha1来解析列表,因此它们会被添加到指令格式之前。
您很快就会有一个新配置:
rebase.instructionFormat
在
git log
中指定的格式字符串,用于交互式rebase期间的指令列表。
格式将自动将长提交哈希添加到格式之前。
例如:
git config --add rebase.instructionFormat "[%an @ %ar] %s"
注意该功能发布后存在错误/回归:
请参阅“Comment in rebase instruction has become too rigid”
我注意到rebase说明表中注释行的格式变得更加严格 - 它不再以空格或制表符开头。注释char(例如“#”)必须出现在第一列。
它出现它只会影响交互式rebase中的显示,而不是结果提交消息。
我尝试了你的示例格式字符串,我确实在我的编辑器中看到了作者信息,但是一旦我告诉它压缩,结果模板提交消息仍然是常见的。
所以这不适合OP。
答案 1 :(得分:4)
没有办法(没有黑客攻击源代码)来修改壁球消息模板,我不这么认为。但是,您有几个选择:
使用git log命令获取候选名单,例如`git log --pretty =“*%s”commit-1..commit-2来获取你的子弹。在linux中,很可能在你的编辑器中做到这一点 - 不知道msysgit是如何工作的。
让您的编辑为您完成工作!我不知道你的编辑是什么,所以我不能真正告诉你该做什么,但在vim中肯定是非常可能的。 (想法是:搜索/# This is the .* commit message/
,删除几行,保留一行,删除下一条评论)
此外,在这种情况下,它可能不是你想要的,但是在相当新版本的git中,你可以使用fixup
标识符而不是压缩 - 它做同样的事情,但它丢弃了提交消息,所以如果你有一个真实消息的提交然后十个修复,你可以只标记它们所有的修复,而不必删除它们的一次性消息。
答案 2 :(得分:0)
你可以随时做一个--amend。你可以在提交之前签出,你想要改变并修改它。