2011-09-18 84 views
9

即,我有:混帳:如何刪除歷史特定之前提交

root -- c1 -- c2 -- .. - c1000 -- c1001 -- c1002 -- .. -- c2000 -- top 

,我想有:

root = c1000 -- c1001 -- c1002 -- .. -- c2000 -- top 

如何?

(我想我可以通過git filter-branch做,但究竟如何?)

(當然,我知道這意味着歷史的重寫......)

回答

4

最簡單的方法是用一個git移植。如果您編輯文件的.git /信息/移植,就可以把線格式

[ref] [parent1] [parent2] ...

任何提交左側引用,然後彷彿右側列出的父母都是處理的文件中該承諾的父母。所以,你可以插入一行像

c1000

,這將被視爲儘管它有沒有父母。然後可以通過運行git-filter-branch來「通過石頭烘焙」。

9

我發現下面的有用與不同的根創建新的回購協議(這是我認爲當你說刪除歷史之前提交你問):

git fast-export master~5..master | (cd ../newrepo.git && git init . && git fast-import && git checkout) 

(你能做到以上在相同的回購)

+0

偉大的提示!從另一個項目的分支創建一個乾淨的項目非常方便,但沒有git filter-branch的麻煩。 – Claudio

+0

這篇文章很老,但我希望我能得到答案。有沒有辦法在導入時保留Commit ID? –