如何自定义git rebase --interactive commit messages的格式?

时间:2010-03-19 22:18:44

标签: git msysgit

我使用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 ++。)

谢谢!

3 个答案:

答案 0 :(得分:9)

启动Git 2.6+(2015年第3季度),实际上有一种方法可以配置git rebase -i commit消息。

commit 16cf51cMichael 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(例如“#”)必须出现在第一列。

Jefromi评论below

  

它出现它只会影响交互式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。你可以在提交之前签出,你想要改变并修改它。