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

时间:2018-10-02 15:28:56

标签: git

我不小心将一个带有一些大文件的tmp目录添加到了(仅)本地git存储库中(.git目录现在太大了134 MB)。

我研究了如何“删除”上一次提交,并找到了git reset --hard HEAD~1命令。如果我运行git log并查看gitk,则最后一次提交确实消失了。但是,如果我再次检查.git目录的大小,它仍然具有134 MB的大小。如果我在.git / objects /中搜索大文件,则会找到具有视频文件确切大小的文件。因此,似乎已删除提交的文件仍然存在。我想在.git目录中删除此文件。我已经尝试过git clean -n,但没有任何显示要删除。

所以我的问题是如何从“未使用”的文件中删除/清理/清除.git目录。

1 个答案:

答案 0 :(得分:1)

如果您真的希望它立即消失—它最终将自动消失 ,这要容易得多–您必须摆脱eftshift0 mentions in a comment的引用日志条目。可能恰好有两种:一种用于HEAD本身的分支的先前值,另一种用于HEAD本身命名的分支的先前的值。在某些情况下,可能还会更多。很少,可能会更少。

为此,请使用git reflog expire --expire-unreachable=now --all。请注意,这将从 all 引用加上HEAD中删除 all 无法访问的引用日志条目。这里的 unreachable 的定义与Think Like (a) Git中的定义相同:在这种特殊情况下,“ reachable”的意思是“从引用本身的当前值可达到”。此特定更改无法撤消,因此,在执行此操作之前,您应该确保不希望任何放弃的提交返回。

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