最近终于是快忙完面向对象课设,前前后后写了2w+行,也勉强算个完整项目了。不过由于项目原先部署在私有Gogs,后来又移到Github私有仓库,导致我没有在意配置文件。最近打算整理整理开源的时候发现,近100 commits里全是我那配置文件。其实以前我也干过这事,当时是biliapi-python的开源,在测试用例中包含了账号信息。当时一顿骚操作,然后成功的把所有commit弄没了。
这次学乖了,跑去看了眼文档,发现一个非常好用的指令git filter-branch
。比如删除passwords.txt
文件,可以运行:
$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21) Ref 'refs/heads/master' was rewritten
而且,由于指令是运行指定的shell,因此批量变更内容的复杂操作也是可以进行的。于是操作就很简单了。首先单独clone下repo,之后cd进来git filter-branch
。之后检查git log
会发现hash和日期都变了,虽然hash没办法,不过日期的问题不用担心,push后是正确的。检查没有问题后,用git push --force
强制push。之后在开发环境fetch之后hard reset
(git reset --hard origin/master
之类)即可。
Reference
Git – 重写历史(https://git-scm.com/book/zh/v1/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E5%86%99%E5%8E%86%E5%8F%B2)
评论