我目前正在将SVN存储库转换为Git,在此过程中,我希望将历史记录尽可能地设置为线性。问题是我在SVN中有一些功能分支,它们在进程中从主分支合并。这种合并模式使得反叛变得痛苦,我无法弄清楚如何正确地做到这一点。
我已经研究了这个问题的答案,但没有一个建议的答案似乎适用于我的案例:git remove merge commit from history
我应该如何压缩我的功能分支,以便我可以在正确的时间点对主机进行重新设置?
让我们说M
是最顶级的合并提交(G
和H
之间):
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
移动到生成的提示提交。