2012-10-26 293 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的原因之一。 –