Git 仓库清洗(清除历史记录)

人有手贱时,有时候不小心把密码 push 上去了,留在历史记录中实在是很蛋疼,所以想个办法清除 Git 历史记录。此外有时候提交了一个较大的没啥用的文件,无疑在 commit 历史中是一个沉重的负担,必须清理。

清除指定文件

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path-of-remove-file' --prune-empty --tag-name-filter cat -- --all

path-of-remove-file是你要删除的文件的相对目录 (相对于 git repo 的根目录), 可以使用通配符*匹配文件进行批量删除。如果执行上述命令后出现的提示信息中有unchanged字样, 说明 repo 中没有找到path-of-remove-file, 请仔细检查路径和文件名是否正确。

更完整模式:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path-of-remove-file' --prune-empty --tag-name-filter cat -- --all
git filter-branch --index-filter 'git rm --cached --ignore-unmatch path-of-remove-file' HEAD
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

这个对特定文件才有效果。

自动清除历史记录

Git 垃圾回收:

git gc --auto

查看大小:

du -hs .git/objects
1.4M .git/objects

强制提交

git reflog expire --expire=now --all
git gc --prune=now
git push --all --force
git push --all --tags --force

最后我想说——对于小仓库并没有什么明显效果,只能清除一些敏感的信息,减少体积还是很困难呐。

你可能感兴趣的:(Git 仓库清洗(清除历史记录))