2

我确定我已经删除了这个文件,但它仍然出现在 verify-pack 中。是什么赋予了?

$ git verify-pack -v .git/objects/pack/pack-5722438014fe04ec9d559810bd7840afb6006858.idx | 排序-k 3 -n | 尾-3

bfafbf4c4cd9a5ddbcb637a09c183c6dabe7acde blob 18960384 1061775 9232588 ec890d28afb338b258727f124e0bfbc11f6c0f0d blob 23079936 2279611 1640818 5daf9ca1b4988c240cb9ac9a2d026e5028e9fd8e blob 79966293 3803212 4919563

$ git rev-list --objects --all | grep 5daf9ca1
5daf9ca1b4988c240cb9ac9a2d026e5028e9fd8e DriverLib/json_spirit/Debug/json_spirit_reader.obj

$ git log --pretty=oneline --branches -- DriverLib/json_spirit/Debut/json_spirit_reader.obj

当我运行 git log 以找出对象所在的提交时,没有任何显示。是什么赋予了?

4

1 回答 1

0

删除一个文件只记录一个不引用该文件的新提交;此分支上包含该文件的所有先前提交(实际上是存储库中的任何其他提交)可能仍会引用文件的 blob 对象,因此文件的内容不会离开存储库。

如果您需要从存储库中完全删除文件(也就是从过去的修订版中删除),则需要使用git filter-branch. 请注意,此工具实际上会重写提交,因此它是一个锋利的工具 - 在尝试使用它重写分支之前,请确保创建另一个指向要重写的分支的原始尖端的指针 -git branchgit tag为此。

另一个可能的原因是该文件仍被一些可通过reflog 访问的提交引用。如果是这样,则要么使 reflog 过期,要么手动删除不需要的条目并运行git gc --aggressive.

于 2013-06-21T08:04:24.277 回答