Git:如何在特定提交之前删除历史记录

Alb*_*ert 10 git git-filter-branch

即,我有:

root -- c1 -- c2 -- .. - c1000 -- c1001 -- c1002 -- .. -- c2000 -- top
Run Code Online (Sandbox Code Playgroud)

我希望:

root = c1000 -- c1001 -- c1002 -- .. -- c2000 -- top
Run Code Online (Sandbox Code Playgroud)

怎么样?

(我想我可以通过git filter-branch,但究竟是怎么做的?)

(当然我知道这意味着历史改写...)

man*_*lds 9

我发现以下用于创建具有不同根目录的新存储库非常有用(当您在提交之前说删除历史记录时,我认为您会问这个问题):

git fast-export master~5..master | (cd ../newrepo.git && git init . && git fast-import && git checkout)
Run Code Online (Sandbox Code Playgroud)

(您也可以在同一个回购中执行上述操作)


Lil*_*ard 4

最简单的方法是使用 git 移植。如果编辑文件 .git/info/grafts,您可以将行放入以下格式的文件中

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

然后,左侧引用的任何提交都将被视为右侧列出的父项是该提交的父项。所以你可以插入一行像

c1000

它将被视为没有父母。然后可以通过运行 git-filter-branch 来“一成不变”。