Git嵌套分支PR含已合并提交,应使用rebase还是squash清理历史?
解决方案
你可以通过git rebase --onto命令精准过滤冗余提交,仅保留目标3条提交作为PR内容,操作步骤如下:
前置操作:同步本地main分支到最新状态
- 切换到本地main分支:
git checkout main - 拉取远程main的最新提交,确保本地main和远程已合并的内容完全对齐:
git pull origin main
核心操作:重定二级分支的基底
- 切换到你的二级分支
style edits:git checkout "style edits"(如果分支名已改为无空格的style-edits,去掉引号即可) - 执行rebase操作筛选提交:
git rebase --onto main "big feature" "style edits"
参数说明:第一个参数main是新的分支基底,第二个参数"big feature"是要排除的提交范围边界(所有存在于big feature分支上的提交都会被过滤),第三个参数是要处理的目标分支。
推送修改到远程
操作完成后style edits分支的提交历史会被改写,仅保留从big feature检出后新增的3条提交,推送时需要使用强制推送参数:git push origin "style edits" --force-with-lease
注意:--force-with-lease比普通--force更安全,会先校验远程分支是否有其他人提交的新内容,避免误覆盖他人修改。
关于你对rebase的疑问补充:如果
big feature合并到main时没有走Squash合并,直接执行普通的git rebase main也会自动识别并跳过已经合并到main的20条提交,只有当big feature是被Squash合并到main时,Git无法匹配原有提交和main的关联,才必须用--onto显式指定范围。
内容的提问来源于stack exchange,提问作者ezeYaniv
相关产品推荐
相关产品推荐

