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



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

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

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

请注意,这将在很大程度上改变所有你的repo中的提交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

这是一个裸repo,这意味着你的普通文件将不可见,但它你的存储库的Git数据库的完整副本,此时你应该做一个备份,以确保你没有丢失任何东西。

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

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

一旦你对你的repo的更新状态感到满意,把它推回来(注意,因为你的克隆命令使用了--mirror标志,这个推将更新在你的远程服务器上的所有 refs):

$ git push

此时,您已经准备好让每个人(包括您自己)抛弃旧的repo副本,并对漂亮的新原始数据进行新的克隆。

…我不得不指出,在清理Git历史记录方面,BFG通常比git-filter-branch要好得多,但在这种情况下,git-filter-branch听起来很适合您的需要。

相关内容

  • 没有找到相关文章