在以下消息格式下如何重新提交任何提交的消息?

问题描述 投票:0回答:2

我需要在不更改任何其他提交信息的情况下,根据给定的提交ID修改提交的消息。但是,提交消息应该接受换行符,等等,类似于使用git commit命令的方式。

例如,考虑以下提交

commit <id>
Author: <user-name> <user-email.com>
Date:   ...

    Hello World

我想将提交消息改写为此

    Hello World

    Text after line break1
    More text

通常的方法是交互式地进行变基,然后使用git commit --amend编辑提交。但是,这将修改提交信息,例如提交者的电子邮件,时间等。

git中的Filter-branch将仅通过更改提交消息和ID即可重写提交,如本answer中所示。

但是,如何使用filter-branch以上述提交消息格式重写提交?

git git-filter-branch
2个回答
0
投票

请参见this link

您可以使用git rebase -i HEAD~N进行交互式变基,它将显示“ N”个提交。然后,您可以转到要更改的提交行,并将pick重命名为reword

此后,您在即将出现的编辑器中调整提交消息。

[NOTE]

不建议更改/重新整理推送的提交,因为您必须force push,其他人必须合并/重新克隆存储库。


-1
投票

注意: 以下方法确实解决了我的问题,但是我仍在寻找一种更简单的方法。

如回答here,以下脚本可用于使用过滤器分支对提交进行重新措辞:

#! /bin/bash
REV=$1
MESSAGE=$2
FILTER="test $(echo '$GIT_COMMIT') = $(git rev-parse $REV) && echo $MESSAGE || cat"
git filter-branch --msg-filter "$FILTER" -- --all

usage: ./script_name.sh <commit-id> "commit message"

但是在新的提交消息中添加换行符,我不得不将提交消息修改为:"$(echo -e 'summary_line\n\nmessage\nmore_message')"如回答here。根据summary_line的常规约定,上述命令在commits之后添加了两个换行符。

此外,由于注释here中提到的转义序列字符,不得不修改脚本。

此行$MESSAGE中的[$(git rev-parse $REV) && echo $MESSAGE更改为\"$MESSAGE\"] >>

因此,如果脚本名称为reword-commit.sh,则为最终命令,(将在git存储库中运行)

./reword-commit.sh <commit-id> "$(echo -e 'Hello World\n\nText after line break1\nMore Text')"
© www.soinside.com 2019 - 2024. All rights reserved.