2013-04-08 70 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

相關問題