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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,307评论 19 139
  • 本文作者陈云峰,转载请注明。 这篇文章记录个人常用的一些命令,和记不住的一些命令,转载了并不断更新。 Git官网 ...
    陳云峰阅读 7,816评论 0 24
  • 《如何阅读一本书》读书笔记 出版时间:1940年(初版)1970年(新版) 作者:莫提默·J·艾德勒;查尔斯·范多...
    思考的小木头阅读 2,870评论 1 5
  • 你是要养个小娃娃的吗 身怀六甲是为了给小生命占山为王呀 孩子,是生命轮回中的徘徊吧 移一棵心 在泥土里发芽,破茧而...
    江城妖怪阅读 1,950评论 1 3
  • 最近工作中完成了项目的用户信息本地存储,查阅了一些本地存储加密方法等相关资料。期间发现了一个来自印度理工学院(II...
    Obsession丶执阅读 4,886评论 0 4