2013-04-08 71 views

回答

2

使用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 

一旦你满意你的回购的更新的状态,将其推回了(注意,因为你的克隆命令使用的--mirror标志,这将推动在远程服务器上更新所有裁判):

$ git push 

在这一点上,你准备好everyone-包括自己-to抛弃他们回购的旧副本和做新的原始数据的新克隆。

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

+0

感谢roberto,我已将我的提交历史中的“is”改为“was”(我的英语太糟糕了:D)。为什么Github不显示实际的字符串?看到这里:https://github.com/khajavi/Design-Patterns/tree/master/Behavioural和这里https://github.com/khajavi/Design-Patterns/commits/master/Behavioural比较。他们为什么不同? – 2013-04-08 08:14:38

+0

@Khajavi这可能只是一个浏览器刷新问题,两个页面上的提交消息匹配时,我刚刚检查他们 - 例如,最新的提交消息是“行为的自述文件被添加。”对彼此而言。 – 2013-04-08 08:44:56

相关问题