不需要的/未跟踪的文件仍在.git目录中,尽管“git reset--hard HEAD~1”

不需要的/未跟踪的文件仍在.git目录中,尽管“git reset--hard HEAD~1”,git,Git,我不小心将一个包含一些大文件的tmp目录添加到我唯一的本地git存储库中。git目录现在的大小太大,为134 MB 我查看了如何删除最后一次提交,找到了git reset-hard-HEAD~1命令并执行了它。如果我运行git日志并查看gitk,那么最后一次提交就真的不见了。但是如果我再次检查.git目录的大小,它仍然有134 MB的大小。如果我在.git/objects/中搜索大文件,我会找到一个与视频文件大小完全相同的文件。因此,似乎已删除提交的文件仍然存在。我想删除.git目录中的此文件。

我不小心将一个包含一些大文件的tmp目录添加到我唯一的本地git存储库中。git目录现在的大小太大,为134 MB

我查看了如何删除最后一次提交,找到了git reset-hard-HEAD~1命令并执行了它。如果我运行git日志并查看gitk,那么最后一次提交就真的不见了。但是如果我再次检查.git目录的大小,它仍然有134 MB的大小。如果我在.git/objects/中搜索大文件,我会找到一个与视频文件大小完全相同的文件。因此,似乎已删除提交的文件仍然存在。我想删除.git目录中的此文件。我已经尝试了git clean-n,但是没有显示要删除的内容


因此,我的问题是如何从未使用的文件中删除/清理/清除.git目录。

如果您真的希望它立即消失,它最终会自行消失,这要容易得多,您必须去掉那些需要重新登录的条目。可能正好有两个:一个用于HEAD的上一个值,另一个用于HEAD本身命名的分支的上一个值。在某些情况下,可能会有更多;很少情况下,可能会更少

为此,请使用git reflog expire-expire unreachable=now-all。请注意,这将从所有references plus HEAD中删除所有无法访问的reflog条目。此处的“不可访问”定义与中的定义相同:在这种特殊情况下,“可访问”指从引用本身的当前值可访问。此特定更改无法撤消,因此在执行此操作之前,您应该非常确定不希望任何已放弃的提交返回


完成此操作后,运行git gc-prune=now以删除未引用的提交及其未引用的文件。

问题是,通过重置还原的版本仍然被其他引用(如reflog)指向。它会在那里停留一段时间,然后最终会被收集起来。虽然可以强制执行,但我不知道它的过程。git-gc似乎可以做到这一点。它将.git目录压缩到94MB,不管我以前是否执行过git reset-hard HEAD~1。修剪时间参数-prune默认为两周,因此可能会在一段时间内删除不需要的文件。在不首先使旧的reflog条目过期的情况下运行git gc会将大型对象留在存储库中,但通常会压缩存储库。在旧的reflog条目过期后立即运行git gc-prune=now应该可以得到更小的压缩存储库。谢谢。很好,它可以手动完成,但git也会关心这个未引用的提交。