删除后,大对象显示在git包中

时间:2013-06-20 19:31:58

标签: git object git-commit

我确定我已删除此文件,但它仍显示在verify-pack中。是什么给了什么?

  

$ git verify-pack -v   .git / objects / pack / pack-5722438014fe04ec9d559810bd7840afb6006858.idx | sort -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 /登场/ json_spirit_reader.obj

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

1 个答案:

答案 0 :(得分:0)

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

如果您需要从存储库中完全删除文件(也就是过去的修订版),则需要使用git filter-branch。请注意,此工具实际上会重写提交,因此它是一个 sharp 工具 - 在尝试使用它重写分支之前,请务必另外指向要重写的分支的原始提示 - {{ 1}}或git branch

另一个可能的原因是该文件仍由the reflog可访问的某些提交引用。如果是这样,那么要么使reflog失效,要么手动删除不需要的条目并运行git gc --aggressive