两周前我重写了GitHub存储库的历史(rebase和一些樱桃选择)并强制将其推回GitHub
git push -f origin master
一切都很顺利,至少看起来那样,git log
显示了正确的提交历史。我知道,重写历史是不好的做法,但是存储库是新的,我是唯一的用户,所以不应该有其他人的麻烦。
我的存储库只有一个名为master
的分支。
现在我的问题。 GitHub的我的存储库的Source视图显示至少有一个由于我重写历史而不再存在的提交。事实上它并不存在于我的本地或GitHub的提交日志中(但它是我本地reflog的一部分)。如何摆脱此提交以及可能在我的远程GitHub存储库中的其他提交?有没有办法清理远程存储库并删除那些不属于提交日志的“无法访问”提交?
BTW如果我克隆GitHub存储库,则克隆中不存在恶意提交。 git show <SHA1>
会返回fatal: bad object
。
我的问题与SO 4367977非常相似,但该问题的解决方案“等待GitHub的垃圾收集”显然不起作用。提交链接在6个月后仍然有效。
删除存储库并重新创建它应该可以解决问题,但这不是很优雅。
提前致谢!
答案 0 :(得分:0)
由于重写历史记录,提交不会从存储库静默消失,他们只是不再被引用。
推送到存储库意味着上传对象列表,然后将某些标记和/或分支设置为某个提交。它并不意味着从目标存储库中删除任何未被分支使用的提交(和其他对象),如现在。
通过克隆检查时,无法再访问提交。从理论上讲,它最终应该是垃圾收集,但正如你所观察到的,这可能不会很快发生 - 也许永远不会发生。 (可能是有人从您链接的其他问题中提到的提交中分叉出来,这会阻碍垃圾回收吗?)
如果“错误”提交中有任何机密数据,请联系github支持将其删除。如果没有,只需忽略提交 - 在存储库中坐在那里没有任何害处。