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

问题描述 投票:2回答:1

我目前正在将SVN存储库转换为Git,在此过程中,我希望将历史记录尽可能地设置为线性。问题是我在SVN中有一些功能分支,它们在进程中从主分支合并。这种合并模式使得反叛变得痛苦,我无法弄清楚如何正确地做到这一点。

我的目标是用壁球提交替换功能分支的合并:enter image description here

我已经研究了这个问题的答案,但没有一个建议的答案似乎适用于我的案例:git remove merge commit from history

我应该如何压缩我的功能分支,以便我可以在正确的时间点对主机进行重新设置?

git merge rebase squash
1个回答
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移动到生成的提示提交。

© www.soinside.com 2019 - 2024. All rights reserved.