修剪旧Git承诺没有变基

时间:2014-07-14 15:59:27

标签: git garbage-collection git-rewrite-history

假设我有一个包含大树(~60 GiB)的Git存储库和一些历史记录,其中旧版本包含许多已删除的文件。

我现在想要修剪旧历史,但没有 rebase修剪点之后的所有提交,因为每次提交需要几个小时

  • 我可以删除要删除的第一个提交对象,并希望git gc删除所有(现在未引用的)旧提交对象吗?或者这会因为缺少物体而导致恐慌吗?

  • 我可以使用git replace替换我想要使用虚拟提交删除的第一个提交,然后调用git gc吗?

  • 是否有其他方法可以就地删除我的旧提交?

1 个答案:

答案 0 :(得分:2)

  

没有在剪枝点之后重新设置所有提交,因为每次提交需要几个小时。

这就是graft point的用途(在特定情况下比git replace更好,因为我detail here

只有一行带有提交ID的文件.git/info/grafts表示提交没有父级。
要保留最近100次提交,请使用git rev-parse

 git rev-parse HEAD~100 > .git/info/grafts

然后:

 git filter-branch -- --all

最后:

rm -Rf .git/refs/original

然后你可以修剪其余部分:

git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
git repack -Ad      # kills in-pack garbage
git prune           # kills loose garbage