如何检查文件或文件夹是否已从Git历史记录中完全删除
针对你用BFG Repo Cleaner清理过target文件夹的场景,按以下步骤操作即可确认是否清理彻底:
遍历全部分支提交搜索目标路径
在仓库根目录执行命令:git log --all --full-history -- target/
执行后如果没有任何输出,代表所有分支、所有提交记录里已经不存在target文件夹的跟踪记录。如果返回了提交列表,说明对应提交里还残留着该文件夹的记录,清理未生效。注意命令里target/末尾的斜杠不要漏,这是匹配文件夹路径的写法,检查单个文件时直接替换为对应文件路径即可。扫描所有Git对象排查残留
执行命令遍历仓库所有历史关联的文件对象:git rev-list --objects --all | grep -F "target/"
该命令会列出所有提交关联的文件路径,过滤后如果无任何输出,代表仓库本地存储的所有Git对象里已经没有target文件夹下的文件残留。如果有输出,每行前半段是文件对象哈希,后半段是残留的文件路径。终验:全新克隆远程仓库校验
本地检查通过不代表远程仓库已经清理完成,BFG执行完成后需要先按官方提示执行本地垃圾回收:git reflog expire --expire=now --all && git gc --prune=now --aggressive
之后将所有分支、标签强制推送到远程仓库,再找一个空目录重新拉取全新的仓库克隆:git clone <你的远程仓库地址> verify-clean-repo
进入新克隆的仓库,重复执行前面两个检查命令,如果都没有输出,就证明远程仓库的历史里已经彻底清除了target文件夹的所有记录。
注意:清理完成后需要通知所有协作者,放弃本地旧的仓库副本,重新从远程拉取清理后的版本,避免协作者推送代码时把旧历史里的
target文件夹记录重新带回远程仓库。
内容的提问来源于stack exchange,提问作者ninjarogue

