2012-03-14 26 views
2

http://snipplr.com/view/11513/,我试图删除Git对象完全后的git重置

$ git reflog expire --expire=1.minute refs/heads/master 
$ git fsck --unreachable # now I see those tarball blobs! 
$ git prune # hasta la vista, baby 
$ git gC# cleanup and repack the repo 

,但它并没有帮助,我仍然能够通过哈希码结账。

+1

请注意,除非丢弃的提交需要大量的磁盘空间或存在安全风险,否则您可以忽略此操作,并最终自行处理。 – Cascabel 2012-03-14 06:35:56

回答

0

除此之外,您还需要过期HEAD的reflog才能使提交成为取消引用。

+0

你能解释一下如何过期HEAD的reflog吗?是否:git reflog expire --expire -reachable = now – sanyo 2012-03-14 05:58:11

+0

这与'refs/heads/master'的命令是一样的,除了使用'HEAD'。 – Amber 2012-03-14 06:43:23

3

您链接到没有因为git gc工作不修剪任何少于两周默认的命令,所以你需要指定要删除这一切:

git reflog expire --expire-unreachable=now 
git gc --prune=now 

的呼吁git prune是多余的,因为git gc无论如何都会调用它。致电git fsck仅用于显示目的,无需运行。

请注意,这些命令将无法恢复任何其他无法访问的提交,当然,reflog将被清除,使其任何良好的回滚功能对过去的历史记录都无法使用。

+0

混帐引用日志--expire不可达=现在 致命的:无法识别的说法:--expire不可达=现在 正确的语法似乎是: 混帐引用日志到期--expire不可达=现在 GC后,不幸的是我还能够通过哈希码结账 – sanyo 2012-03-14 05:52:53

+0

是的,你说得对,我已经更新了。 git fsck --unreachable中显示的提交哈希是否出现? – 2012-03-14 06:11:46

+0

确保你没有参考该提交'git标签 - 包含'和'git branch -a --contains ',然后重新包装它们。 – 2012-03-14 07:30:40