如何变基Pull Request且不引入额外提交以简化代码评审?
解决PR提交过多的问题
问题原因
你执行git rebase master后,本地feature-branch的提交历史已基于最新master(包含master的10次提交),但远程feature-branch仍保留旧历史(基于旧master的3次提交)。直接执行git pull会将远程旧分支合并到本地,导致分支历史混乱,最终PR里混入了master的10次提交。
修复步骤
1. 重置本地分支并重新变基
先确保本地master是最新版本:
git checkout master git pull
切回你的特性分支:
git checkout feature-branch
执行交互式变基,将你的3次提交基于最新master重新应用,还可按需合并提交以简化评审:
git rebase -i master
弹出编辑器后,会看到提交列表:
pick abc123 第一次提交的说明 pick def456 第二次提交的说明 pick ghi789 第三次提交的说明
- 若要保留3次独立提交:全部保留
pick,保存退出后Git会自动将这3次提交重新应用到最新master之后。 - 若要合并为1次提交:把后两次的
pick改成squash(或缩写s),示例:
保存退出后编辑合并后的提交说明,完成后即可得到包含所有更改的单一提交。pick abc123 第一次提交的说明 squash def456 第二次提交的说明 squash ghi789 第三次提交的说明
2. 强制推送到远程
变基后本地分支历史与远程完全不同,需使用安全的强制推送(--force-with-lease可避免意外覆盖他人更改):
git push --force-with-lease origin feature-branch
3. 验证PR更新
此时PR会自动更新,提交列表只会显示你的3次(或合并后的1次)提交——master的10次提交因已存在于目标分支中,会被PR自动过滤,仅展示特性分支独有的更改。
后续正确的变基流程
以后需将PR变基到最新master时,遵循以下步骤即可避免混乱:
- 拉取最新master:
git checkout master && git pull - 切回特性分支:
git checkout feature-branch - 变基到master:
git rebase master - 强制推送:
git push --force-with-lease origin feature-branch
内容的提问来源于stack exchange,提问作者abhishek
相关产品推荐
相关产品推荐

