2012-10-26 76 views
6

我有一个超过3年的大型仓库git,我想删除一年多以前的更改历史记录。这可能吗?可以使用git rebase但是如何?Git删除历史提交

+0

Git用于保存您的更改。删除历史有什么影响? –

+0

我的历史是它太大,.git目录大于400 MB,在每一个克隆我必须下载所有这些历史:( – paweb

+0

可能的重复:[我如何从git存储库中删除旧的历史?](http:///stackoverflow.com/questions/4515580/how-do-i-remove-the-old-history-from-a-git-repository) –

回答

3

调查this article from the Pro Git book中称为git replace的黑魔法,它以您的确切情况为例。基本上,如果你可以在历史中找到一个你想作为新根的点,那么你可以用一个没有父母的提交来替代它,就好像它是在空气中创建的一样。您甚至可以将原始树存储在一台机器上,如果您再次需要,可以轻松恢复历史记录。

请注意git rebase(和git replace,对于这个问题)的一个问题是,你想重写整个树,包括分支,所以它们都指向不同的提交。这也会导致团队中的其他人难以合并他们的变化,因为所有父母都有不同于以前的SHA。

+1

从我读的,''git replace'' thingy不会在改变哈希的问题上工作。 –

+1

@Jonas你是对的。重构我的答案以便清楚。 –

+1

太棒了!它也会是git中的一个巨大bug你可以在不改变哈希的情况下替换一大堆历史记录。毕竟,这些加密哈希是使用git的原因之一。 –