我想grep和更改所有推送到Github的消息中的特定字符串。可能嗎?怎麼樣? 我知道如何更改最後一條消息git commit --amend
,但我想更改所有提交的所有消息。如何更改所有git消息提交中的特定字符串?
1
A
回答
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
聽起來非常適合您的需求。
相關問題
- 1. 檢查提交消息中的特定字符串 - SVN Precommit Hook
- 2. 更改Git提交信息
- 3. 意外推送提交:更改git提交消息
- 4. Git:撤消未提交的更改以重置特定文件
- 5. Git別名:追加字符串以提交消息
- 6. git diff最後提交加上所有未提交的更改?
- 7. Git推送所有提交作爲單個提交與自定義消息
- 8. 從字符串中提取所有出現的特定字符
- 9. git搜索提交更改的字符串和列表文件與該提交中的字符串
- 10. 什麼是我的Git提交消息中的空白字符?
- 11. 在git中輸出給定提交的提交消息
- 12. 更改作者以提交特定消息
- 13. 如何doyou在git中修改最後一個提交消息?
- 14. 如何在git中修改提交消息?
- 15. git提交模板消息
- 16. Git - 撤消所有更改更改
- 17. 在Git上更改舊的提交消息
- 18. 如何撤消提交併將更改提交到Git中的其他分支?
- 19. 如何選擇WHERE字符串提交給美國一個特定的字符串開始的所有行
- 20. 從特定字符串提取信息
- 21. 如何更改hg mq中的提交消息?
- 22. git cherry:如何通過提交消息識別等價提交
- 23. 如何做git南瓜承諾給定的提交消息
- 24. 在GIT的特定分支中查找所有提交
- 25. 重置上次提交後git中的所有更改
- 26. 更改git歷史記錄中所有提交的時區
- 27. 如何列出包含Git中所有更改文件的特定文件的提交?
- 28. 如何提取特定的字符串
- 29. 有沒有辦法在檢查更改時用git累積提交消息?
- 30. 更改消息以Umbraco形式提交
感謝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
@Khajavi這可能只是一個瀏覽器刷新問題,兩個頁面上的提交消息匹配時,我剛剛檢查他們 - 例如,最新的提交消息是「行爲的自述文件被添加。」對彼此而言。 – 2013-04-08 08:44:56