12

我将 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

当然,那是在每条提交消息前面删除# This is the xth commit message行和复制/粘贴之后。*

现在,我想知道的是,有没有办法自定义 git rebase -i 如何输出压缩的提交消息,这样我就不必做所有的黑客攻击了?

(如果这很重要,我使用 msysgit。我的编辑器是 Notepad++。)

谢谢!

4

3 回答 3

11

从 Git 2.6+(2015 年第三季度)开始,实际上会有一种配置 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”可以覆盖变基指令列表的默认“ oneline”格式。

由于列表是使用左、右或边界标记加上 sha1 来解析的,因此它们被附加到指令格式中。

你很快就会有一个新的配置:

rebase.instructionFormat

中指定的格式字符串,git log用于交互式变基期间的指令列表。
该格式将自动将长提交哈希添加到格式中。

例如:

git config --add rebase.instructionFormat "[%an @ %ar] %s"

请注意,该功能发布后存在错误/回归:
请参阅“ Rebase 指令中的评论变得过于僵化

我注意到变基指令表中注释行的格式变得更加严格——它不能再以空格或制表符开头。注释字符(例如“#”)必须出现在第一列。


Jefromi评论如下

看来它只是为了影响交互式 rebase 中的显示,而不是生成的提交消息

我用你的示例格式字符串试了一下,我确实在我的编辑器中看到了作者信息,但是一旦我告诉它压缩,生成的模板提交消息仍然是通常的。

所以这对 OP 来说并不完美。

于 2015-08-16T19:20:12.197 回答
4

我认为没有办法(除了破解源代码)来修改壁球消息模板。但是,您有几个选择:

  • 使用 git log 命令获取候选名单,例如 `git log --pretty="* %s" commit-1..commit-2 来获取你的项目符号。在 linux 中,很可能在您的编辑器中执行此操作 - 不知道它如何与 msysgit 一起使用。

  • 让您的编辑为您完成工作!我不知道你的编辑器是什么,所以我不能真正告诉你该怎么做,但在 vim 中肯定很有可能。(想法是:搜索/# This is the .* commit message/,删除几行,保留一个,删除到下一条评论)

此外,在这种情况下,这可能不是您想要的,但在最近版本的 git 中,fixup您可以使用一个标识符来代替 squash - 它做同样的事情,但它会丢弃提交消息,所以如果你有一个提交真实消息,然后十个修复,您只需将它们标记为所有修复,而不必删除它们的一次性消息。

于 2010-03-19T22:31:46.740 回答
0

您可以在需要时进行 --amend 。您可以在提交之前签出您想要更改并修改它的提交。

于 2010-03-21T10:10:23.423 回答