Mil*_*avi 3 git version-control github rebase git-rewrite-history
我想 grep 并更改推送到 Github 的所有消息中的特定字符串。是否可以?如何?我知道如何更改最后一条消息git commit --amend,但我想更改所有提交的所有消息。
git-filter-branch与它的--msg-filter选项一起使用,例如:
git filter-branch -f --msg-filter 'sed "s/git-svn.*$//g"' -- --all
Run Code Online (Sandbox Code Playgroud)
请注意,这将改变您存储库中的几乎所有提交 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
Run Code Online (Sandbox Code Playgroud)
这是一个裸存储库,这意味着您的普通文件将不可见,但它是存储库的 Git 数据库的完整副本,此时您应该对其进行备份以确保不会丢失任何内容。
现在您可以运行git-filter-branch来修复您的提交消息:
git filter-branch -f --msg-filter 'sed "s/git-svn.*$//g"' -- --all
Run Code Online (Sandbox Code Playgroud)
一旦您对存储库的更新状态感到满意,请将其推送回去(请注意,因为您的克隆命令使用了该--mirror标志,所以此推送将更新远程服务器上的所有引用):
$ git push
Run Code Online (Sandbox Code Playgroud)
此时,您已经准备好让每个人(包括您自己)放弃旧的存储库副本,并为漂亮的新原始数据进行新的克隆。
...我不得不指出,BFGgit-filter-branch通常比清理 Git 历史记录要好得多,但在这种情况下git-filter-branch,听起来非常适合您的需求。
| 归档时间: |
|
| 查看次数: |
1855 次 |
| 最近记录: |