如何在git中重命名最后N个提交消息?

时间:2013-01-07 18:01:17

标签: git

我有30次提交,我想在所有邮件的开头添加“Bug XXXXXXX”,我可以在一个操作/命令中执行此操作吗?

我试图避免挤压它们。

谢谢!

2 个答案:

答案 0 :(得分:16)

使用git rebase -i HEAD~<N>,其中N是要返回的提交数,-i将使其成为交互式,即它将在vim或任何默认编辑器中打开。见Scott Chacon's Book。然后,您可以更改提交消息。

如果您需要自动化,那么您可能需要尝试filter-branch

  

您需要时可以使用的另一个历史记录重写选项   以某种可编写脚本的方式重写大量提交

在这种情况下,您将使用:

git filter-branch --msg-filter <command>

请参阅man git-filter-branch

以下是手册中给出的“Acked-by”附加到一系列提交的示例。您可以将其更改为“BUG XXXXXXX”

git filter-branch -f --msg-filter '
    echo "Bug XXXXXXX: \c"
    && cat
    ' HEAD~<N>..HEAD

其中N是要返回并追加“BUG XXXXXXX”的提交数量

答案 1 :(得分:1)

最好不要依赖以下任何一种:

echo -n "Bug XXXXXXX: "

echo "Bug XXXXXXX: \c"

回声的行为取决于正在使用的回声版本。请参阅下面的链接stackoverflow问题:

'echo' without newline in a shell script

更好的解决方案可能是:

git filter-branch -f --msg-filter '
    printf "%s" "Bug XXXXXXX: "
    && cat
    ' HEAD~<N>..HEAD