如何在所有git消息提交中更改特定字符串?

时间:2013-04-08 06:45:46

标签: git version-control github rebase git-rewrite-history

我想grep并在推送到Github的所有消息中更改特定字符串。可能吗?怎么样? 我知道如何更改上一条消息git commit --amend,但我想更改所有提交的所有消息。

1 个答案:

答案 0 :(得分:3)

git-filter-branch--msg-filter选项一起使用,例如:

git filter-branch -f --msg-filter 'sed "s/git-svn.*$//g"' -- --all

请注意,这会在您的回购中更改所有您的提交ID,因此每个处理您项目的人都需要进行新的克隆。

请参阅此博客文章以获取更多讨论:

http://mm0hai.net/blog/2011/03/10/rewriting-git-commit-message-history.html

请注意,上述命令仅针对您的本地副本执行,您需要推送到GitHub才能将更新反映在那里...

步骤一步

首先使用--mirror标记克隆您的仓库的新鲜副本:

$ git clone --mirror git://example.com/my-repo.git

这是一个简单的回购,这意味着您的普通文件不可见,但 是您的存储库的Git数据库的完整副本,此时您应该制作备份它以确保您不会丢失任何东西。

现在您可以运行git-filter-branch来修复提交消息:

git filter-branch -f --msg-filter 'sed "s/git-svn.*$//g"' -- --all

如果您对repo的更新状态感到满意,请将其重新启动(请注意,由于您的克隆命令使用了--mirror标记,此推送将更新所有你的远程服务器上的引用):

$ git push

此时,你已经为所有人做好了准备 - 包括你自己 - 放弃他们旧的回购副本,并做出新的原始数据的新克隆。

...我不得不指出The BFG通常比git-filter-branch更好地清理Git历史记录,但在这种情况下只有git-filter-branch听起来很合适你的需求。