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

Bitbucket手动回退代码后Pull Request未显示差异问题求助

问题原因与解决方案

核心原因:Git差异计算与合并逻辑的差异

1. PR差异的计算逻辑

Bitbucket默认的PR差异是基于源分支与目标分支的最近共同祖先(merge base)来计算的,显示的是源分支相对于merge base的净变更。在你的场景中:

  • 你的my-feature-branch提交历史:初始提交 → 你的功能代码 → 合并staging-branch(引入feature-xyz) → 回退feature-xyz的提交
  • develop提交历史:初始提交 → ... → 合并feature-xyz

两者的merge base是my-feature-branch从develop切出时的初始提交。从merge base到my-feature-branch的路径中,“添加feature-xyz”和“回退feature-xyz”是两个反向操作,Git会判定这部分的净变更为0,因此不会在PR差异中显示。

2. Git合并的逻辑

合并操作是按提交历史逐个应用变更,而非只看净变更。当你将my-feature-branch合并到develop时,Git会把所有提交(包括回退feature-xyz的那个)依次应用到develop上。由于develop此时已经包含feature-xyz的变更,回退提交会直接删除这些代码,导致最终develop中的feature-xyz被移除。

解决方案

  1. 切换PR对比方式
    在Bitbucket的PR页面中,找到对比选项(通常在差异视图顶部),切换为**“源分支 vs 目标分支当前状态”**的直接对比。此时会显示my-feature-branch与最新develop的差异——也就是你回退feature-xyz的删除操作。

  2. 合并最新develop到你的分支再发起PR
    在发起PR前,执行以下操作:

    git checkout my-feature-branch
    git pull origin develop
    git push origin my-feature-branch
    

    这样会更新你的分支与develop的merge base为最新的develop提交,PR差异会准确显示你的分支相对于develop的所有变更(包括回退操作)。

  3. 优化分支协作流程
    避免直接拉取staging-branch到个人功能分支,而是从develop拉取最新代码。团队的staging-branch仅用于验证,代码合并应通过develop流转,减少无关变更引入个人分支的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:07:50