我想grep并在推送到Github的所有消息中更改特定字符串。可能吗?怎么样?
我知道如何更改上一条消息git commit --amend
,但我想更改所有提交的所有消息。
答案 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
听起来很合适你的需求。