在git历史记录中删除多合并功能分支

时间:2019-03-18 19:24:24

标签: git merge rebase squash

我目前正在将SVN存储库转换为Git,在此过程中,我想使历史记录尽可能地线性。问题是我在SVN中有一些功能分支,它们在此过程中是从master分支合并的。这种合并模式使重新定位变得很痛苦,我无法弄清楚该如何正确地进行。

我的目标是用南瓜提交替换特征分支的合并: enter image description here

我已经研究了这个问题的答案,但是没有一个建议的答案适合我的情况: git remove merge commit from history

我应该如何挤压功能分支,以便可以在正确的时间点将其重新建立在master上?

1 个答案:

答案 0 :(得分:2)

假设M是最高合并提交(GH之间的合并提交)

git checkout -b cleaned-branch M
git reset --soft G
git commit -m "Get rid of merge"
git rebase M `git rev-parse master` --onto cleaned-branch
git checkout -B cleaned-branch

git reset --soft G将使git认为G是您当前的基本提交,但这样做无需触摸文件(与checkout不同),因此您将拥有所有从合并中以未完成更改的形式进行更改,并且后续提交仅将G作为其父级。然后,我们将剩余的提交重新设定基础,并将cleaned-branch移至最终的提交提示。