我使用git进行本地工作(并且非常喜欢它),我遵循类似于本文所述的工作流程.所以基本上,当开始一个新功能时,我为它创建一个分支,经历通常的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
Run Code Online (Sandbox Code Playgroud)
当然,这是在每个提交消息前面的一堆删除# This is the xth commit message行和复制/粘贴*之后.
现在,我想知道,有没有办法定制git rebase -i如何输出压缩的提交消息,所以我不必做所有的黑客攻击?
(我使用msysgit,如果这很重要.我的编辑器是Notepad ++.)
谢谢!
启动Git 2.6+(2015年第3季度),实际上有一种方法可以配置git rebase -i commit消息.
请参阅Michael Rappazzo()提交16cf51c(2015年6月13日).(由Junio C Hamano合并- -在提交9f56db7,2015年8月3日)rappazzo
gitster
git-rebase--interactive.sh:为自定义指令格式添加配置选项配置选项'
rebase.instructionFormat'可以覆盖onelinerebase指令列表的默认格式.由于使用左,右或边界标记加上sha1来解析列表,因此它们被添加到指令格式之前.
你很快就会有一个新的配置:
rebase.instructionFormat
Run Code Online (Sandbox Code Playgroud)
git log在交互式rebase期间用于指令列表的格式字符串,如指定的那样.
格式将自动在格式之前添加长提交哈希.
例如:
git config --add rebase.instructionFormat "[%an @ %ar] %s"
Run Code Online (Sandbox Code Playgroud)
请注意,该功能发布后存在错误/回归:
请参阅" rebase指令中的注释变得过于严格 "
我注意到rebase指令表中注释行的格式变得更加严格 - 它不再以空格或制表符开头.注释char(例如"#")必须出现在第一列.
它似乎只是意味着影响交互式rebase中的显示,而不是产生的提交消息.
我尝试了你的示例格式字符串,我确实在我的编辑器中看到了作者信息,但是一旦我告诉它压缩,结果模板提交消息仍然是常见的.
所以这不适合OP.
我认为没有办法(除非破解源代码)来修改挤压消息模板。但是,您有几个选择:
使用 git log 命令获取候选名单,例如 `git log --pretty="* %s" commit-1..commit-2 来获取项目符号。在 Linux 中,很可能在编辑器中执行此操作 - 不知道 msysgit 是如何工作的。
让您的编辑为您完成这项工作!我不知道你的编辑器是什么,所以我不能真正告诉你该怎么做,但在 vim 中这肯定是可能的。(想法是:搜索/# This is the .* commit message/,删除几行,保留一行,删除直到下一条评论)
另外,在这种情况下,这可能不是你想要的,但在相当新的 git 版本中,fixup你可以使用一个标识符来代替挤压 - 它做同样的事情,但它会丢弃提交消息,所以如果你有一个提交真实的消息,然后十个修复,您可以将它们全部标记为修复,而不必删除它们的一次性消息。