删除 git 历史记录中的多合并功能分支
Remove multi merge feature branch in git history
我目前正在将 SVN 存储库转换为 Git,在此过程中,我希望使历史尽可能线性化。问题是我在 SVN 中有一些功能分支,这些分支在此过程中从 master 分支合并。这种合并模式让变基变得很痛苦,我不知道如何正确地做它。
我的目标是用压缩提交替换功能分支的合并:
我已经研究了这个问题的答案,但是 none 的建议答案似乎适用于我的情况:
git remove merge commit from history
我应该如何压缩我的功能分支,以便我可以在正确的时间点将其变基到 master 上?
假设 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
向上移动到生成的提示提交。
我目前正在将 SVN 存储库转换为 Git,在此过程中,我希望使历史尽可能线性化。问题是我在 SVN 中有一些功能分支,这些分支在此过程中从 master 分支合并。这种合并模式让变基变得很痛苦,我不知道如何正确地做它。
我的目标是用压缩提交替换功能分支的合并:
我已经研究了这个问题的答案,但是 none 的建议答案似乎适用于我的情况: git remove merge commit from history
我应该如何压缩我的功能分支,以便我可以在正确的时间点将其变基到 master 上?
假设 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
向上移动到生成的提示提交。