删除所有不是" my_dir /"在我使用的存储库历史记录中:
git filter-branch --prune-empty --subdirectory-filter my_dir/ --prune-empty --tag-name-filter cat -- --all
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d;
git reflog expire --expire=now --all;
git gc --prune=now;
现在,使用:
git log
一切似乎都很好:日志只显示包含" my_dir"中文件的提交。
可是:
git log --all
仍然显示一切。事实上,做另一个filter-branch(删除my_dir中的其他.pyc文件)会找到(并删除)旧目录中的所有.pyc文件。
似乎--subdirectory-filter并没有真正删除提交......它们仍在那里。
我错过了什么?
编辑:
子目录 - 过滤器"只查看触及给定子目录的历史记录"。所以也许它不会删除所有其他提交,但只是重写那些触及该目录并且不知何故离开"孤儿"对于其他人???
答案 0 :(得分:1)
filter-branch
命令为" old"创建新的引用。提交以防您需要撤消。 git log --all
显示所有引用的历史记录,包括filter-branch
创建的特殊引用。
更一般地说,实际删除提交对象的唯一git命令(我能想到)是gc
。要使gc
删除提交,必须无法从任何引用或reflog访问它。所以,如果你想让提交真的消失:
1)删除original/*
引用
2)擦除reflog
3)使用prune=now