各位在github上维护自己编写的代码工程仓库时,想必遇到过仓库内文件泄漏隐私信息、commits泄漏邮箱信息等敏感头疼问题,但是由于这些仓库收获了很多stars,不想删除后重建新仓库。为了解决这些问题,这里有两个办法:
方法一:强制回退法
克隆仓库,但记住不可以加--depth=1这类选项;
使用 git log 命令查询要回滚的 commit_id;
查找最早一次提交到的commit_id;
备份原仓库目录下所有文件及文件夹(.git文件夹除外);
强制还原,执行命令:git reset --hard commit_id,之后 HEAD 就会指向此次的提交记录;
删除仓库目录下所有文件和文件夹,去除你备份的文件中包含隐私信息的部分,并还原至原仓库目录下;
执行提交新commit前的常规操作:git add . 和 git commit -m "<...>";
强制推送到github远程仓库:git push origin HEAD --force;
此时只剩下第一次提交和本次提交记录,基本达到清空目的:
此方法速度比较快,但缺点很明显:第一次commit记录无法清除。
方法二:分支替换法
同方法一克隆仓库;
将当前分支指向一个空分支 latest_branch:git checkout --orphan latest_branch;
备份原仓库目录下所有文件及文件夹(.git文件夹除外),之后清空该目录(.git文件夹除外);
去除你备份的文件中包含隐私信息的部分,并还原至原仓库目录下,最后重新添加:git add -A;
提交更改:git commit -am "<...>";
删除原分支:git branch -D master (新版的github默认分支是main了,请根据实际情况更改,下同);
将现有临时分支切换到主分支:git branch -m master;
强制推送到远程:git push -f origin master --force
此时就全部清空了,只剩本次提交,完美!
版权归原作者 Ernesto Castañón 所有, 如有侵权,请联系我们删除。