2011-09-18 79 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? –