我目前正在将SVN存储库转换为Git,在此过程中,我希望使历史记录尽可能线性。问题是,我在SVN中有一些功能分支,它们在过程中从主分支合并而来。这种合并模式使得rebaseing成为一种痛苦,我不知道如何正确地完成它。
我的目标是将功能分支的合并替换为squash commits:
我研究了这个问题的答案,但似乎没有一个建议的答案对我的情况有效:git remove merge commit from history
我应该如何开始挤压我的功能分支,以便我可以在正确的时间点重新建立它在master上的基础?
发布于 2019-03-19 03:35:39
假设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
向上移动到结果tip提交。
https://stackoverflow.com/questions/55228691
复制相似问题