【发布时间】:2015-08-21 17:44:24
【问题描述】:
我使用 BFG 从 Git 存储库中擦除了一个敏感文件,如果我执行 git clone,我无法使用类似这样的方式找到该对象:
git rev-list --objects | grep my_filename
但是,在旧的克隆中,我仍然可以使用这种技术找到对象,即使我已尽我所知对其进行了更新。具体来说,我跑过:
git fetch --tags --all --prune
git rebase
git reflog expire --expire=now --all && git gc --prune=now --aggressive
我还删除了此克隆中的所有分支(master 除外),但无济于事。我可以看到一些标签引用了该对象,因为:
git log --oneline --branches --tags -- my_filename
列出包含文件的提交,而:
git log --oneline --branches -- my_filename
没有(注意后者中缺少--tags 标志),但显式枚举了所有标签:
for tag in $(git tag); do echo $tag; git log --oneline --branches --tags=$tag -- my_filename; done
什么都没有。
我的问题是:
-
git log --tags和在git tag中为每个BRANCH运行git log --tags=BRANCH有什么区别? - 是否有一个简单的命令可以找出特定对象不符合 Git 垃圾回收条件的原因?
【问题讨论】: