Git - 删除无用的文件历史记录
这几个晚上在倒腾 CDOJ 的 git repository,在家试着 git clone
了一把,第一感觉是
1 | 坑爹啊,这是什么鬼,为什么会有100多MB的history。 |
国内的情况你们懂的,花了 10 来分钟才把 repo 下下来,想了下原因,大致上是:昀大爷年轻的时候把 MathJax
和 Font
之类的前端 module 给 push 上去了,还不时地移了几次位置,更新了几次版本,就这样把几百 MB 的东西加到历史里去了。。。
那么问题来了,怎么要才能把这些 “没有必要存在” 的文件从 git history 里面给干掉呢?这里推荐一个相对简单的办法(更简单的办法是用 bfg
,然而家里的网络直接装都装不上,我放弃了)。
想起来你要删的文件是什么
在这里我们用 MathJax.zip
做例子。
用 git filter-branch 去看下有多少 commits 和你选择的文件相关。
1 | $ git log --stat | grep -B 10 -A 10 MathJax\\.zip |
在这里, grep
的 A 和 B 参数表示的是 after 和 before,这样可以大致上看到一个 commit 的 context。
把你所不关心的文件从历史记录中删掉
1 | $ git filter-branch --force --index-filter \ |
清理下你的本地 git repo
1 | $ git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin |
强制刷新 remote repo 的内容
1 | $ git push origin --force --all |