【问题标题】:git filter-branch --msg-filter to reword a pushed commit messagegit filter-branch --msg-filter 改写推送的提交消息
【发布时间】:2013-11-07 08:10:33
【问题描述】:

如何改写已经推送到私人远程的旧提交的消息? 我想保留时间戳和标签。

我找到了这个命令here:

git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all

为了保留我添加的标签:--tag-name-filter cat

执行命令时git告诉我:msg filter failed

我要更改的消息是合并消息“Merge branch 'release/...'”是这个问题吗?

【问题讨论】:

标签: git message commit git-filter-branch revision-history


【解决方案1】:

解决方案是使用反斜杠转义“release/...”中的斜杠。所以我使用的命令是:

git filter-branch -f --msg-filter \
'sed "s/release\/Version-[0-9].[0-9].[0-9]/develop/g"' \
--tag-name-filter cat -- --all

【讨论】:

  • 或者,在 sed 表达式中使用不同的分隔符,例如sed "s|release/Version-[0-9].[0-9].[0-9]|develop|g"
【解决方案2】:

这是一个略微改进的版本,它还可以在执行过滤分支时动态更新提交消息中对提交哈希的所有引用:

rm -f /tmp/git;
touch /tmp/git;
git filter-branch \
    --subdirectory-filter <DIRECTORY> \
    --tag-name-filter cat \
    --commit-filter 'echo -n "s/${GIT_COMMIT}/" >>/tmp/git; \
                     NEW=`git_commit_non_empty_tree "$@"`; \
                     echo "${NEW}/g" >> /tmp/git; echo ${NEW}' \
    --msg-filter 'sed -f /tmp/git' \
    -- --all

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2020-07-22
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多