在特定提交之前删除提交

时间:2010-06-17 15:27:44

标签: git version-control

有没有办法在指定的提交之前删除所有提交并使用该提交作为初始提交?

2 个答案:

答案 0 :(得分:23)

假设新的最旧提交的哈希是X,我们可以暂时使用“oldroot”和“newroot”:

git checkout -b oldroot X
TREE=`git write-tree`
COMMIT=`echo "Killed history" | git commit-tree "$TREE"`
git checkout -b newroot "$COMMIT"
git rebase --onto newroot oldroot master
# repeat for other branches than master that should use the new initial commit
git checkout master
git branch -D oldroot
git branch -D newroot
git gc # WARNING: if everything's done right, this will actually delete your history from the repo!

这将创建一个'newroot'提交,其内容与'oldroot'提交相同,但没有任何父母。然后,它将所有其他分支重新绑定到新的根,这应该在所有分支的历史中。

编辑:测试并修复;稍后,精炼了一下

答案 1 :(得分:0)

更简单的解决方案是, 最初考虑您的分支已提交主要并且您首先提交了 ,现在您还在第一个之上执行了提交第二次 / strong>即可。所以你有类似的东西:

main->first->second

现在您希望在主要之上第二,而不是在第一之上。类似的东西:

main->second->first or main->second

你可以这样做,

git rebase -i main

这将为您提供一个交互式shell,您可以在其中重新排列提交顺序或删除您选择的任何提交。