You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

squash合并分支后再次同步仍显示旧提交差异该如何解决

问题根因

squash merge的机制是将源分支的多个提交压缩为1个全新的提交写入目标分支,不会在两个分支之间建立合并提交的父节点关联。PR1完成后main分支仅保留A、B、C压缩后的新提交,develop分支上的A、B、C原始提交仍然独立存在,Git无法识别这部分提交已经被合并到main,因此第二次合并时会重复识别这部分提交的差异。

可选解决方案

方案1:修改develop分支(一劳永逸,后续跨分支合并不会再出现该问题)

适合接受修改develop历史、需要长期维护两个分支同步的场景:

  • 拉取本地最新代码
    git checkout main
    git pull origin main
    git checkout develop
    git pull origin develop
    
  • 执行交互式重基,剔除已经合并过的旧提交
    git rebase -i main
    
    在弹出的编辑界面中,找到提交A、B、C对应的三行,将行首的pick修改为drop,保存并退出编辑器。
  • 验证重基结果:执行git log确认develop分支仅剩PR2合入的b-new相关提交,执行git diff main确认只有b-new对应的改动差异。
  • 强制推送修改后的develop分支:git push -f origin develop
  • 重新发起PR3,此时PR只会展示b-new对应的新差异,正常走审批合并即可。

方案2:不修改现有develop分支(仅解决本次PR3问题,保留所有历史提交)

适合不想改动develop原有提交记录的场景:

  • 拉取本地最新的main和develop代码
    git checkout main
    git pull origin main
    git checkout develop
    git pull origin develop
    
  • 基于main创建临时分支用于发起PR3:git checkout -b temp-for-pr3 main
  • 执行合并操作标记旧提交已合并:
    git merge develop -s ours --no-commit
    
  • 手动应用b-new对应的改动:可以直接从develop分支拷贝改动后的文件,或者执行git cherry-pick <PR2对应的合入提交ID>引入新改动。
  • 提交改动:git commit -m "合入develop分支最新改动(包含b-new功能)"
  • 推送临时分支:git push origin temp-for-pr3
  • 用该临时分支发起向main的PR替换原有PR3,此时PR只会展示b-new的改动差异,走审批合并即可,合并完成后可删除临时分支,不影响现有develop分支的提交记录。

内容的提问来源于stack exchange,提问作者WenliL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:48:04