从主分支中间删除特定的分支提交

从主分支中间删除特定的分支提交

问题描述:

我有很多属于特定分支的提交(数百),这是很久以前合并为主(该合并后有新的提交)。 关于如何从主人中删除这些提交的任何想法?建议不要一个一个地用git-revert。更像是一个filter-branch命令。 谢谢从主分支中间删除特定的分支提交

+0

你想把它们带回来,就像“将它们从分支的历史中删除,就好像它们没有发生过一样”(重写分支历史),或者你想“根据分支的当前历史记录应用提交那些变回“(恢复,不需要重写)? – eftshift0

+0

[Git delete push commits]的可能重复(https://stackoverflow.com/questions/13577283/git-delete-pushed-commits) – legoscia

+0

@Edmundo第一选择:将它们从主分支的历史记录中删除,就好像它们没有这种情况不会发生 – Cezar

然后你要做的事情很简单:在之前识别修订你想从历史中删除的分支被合并。看看这个版本....然后选择合并后的所有版本。

假设之前的版本合并为修订版A,合并版本为B,您正在工作的分支被称为'someBranch'。然后,你可以这样做:

git checkout A 
git cherry-pick B..someBranch 

如果你喜欢的结果,那么你可以重新指向someBranch到当前版本:

git branch -f someBranch 
git checkout someBranch 

当你重写一个分支,其他人都在工作“旧分支“,那么为了推动这个新的”重写“历史而存在摩擦,所以记住这一点。

+0

合并后,有数百次提交。不想樱桃一个接一个。对不起,没有更具体的 – Cezar

+0

如果它是一个线性流动,B..someBranch将会使用它们,所以你不必一个接一个地挑选。如果它不是线性流动,那么您可以考虑使用rebase。就像:'''git rebase -p - 若有一个B someBranch''',如果我没有错的话。 – eftshift0

+0

如果在进行rebase时270个子提交(合并)没有冲突,那么rebase就可以做到这一点。我可以一一解决,但这不是我要找的 – Cezar