为何GitHub Pull Request的base分支(左侧)内容与实际HEAD版本不一致
问题原因
核心是Git三点diff语法和PR默认比较逻辑的特性,具体如下:
git diff A...B的本质是对比两个分支的最近共同祖先节点(merge base)与B分支HEAD的差异,而非直接对比A分支当前最新HEAD和B分支的差异。你执行的git diff prod...prod-feature以及绝大多数Git托管平台的PR默认比较逻辑都采用了这套规则,目的是仅展示待合入分支本身引入的变更,排除目标分支后续新增变更的干扰。- 该现象刚好符合这套逻辑:
prod-feature分支是从prod分支尚未修复格式化问题的旧提交上切出的,后续prod分支合入了格式化修复的提交,但prod-feature分支没有合并/变基同步最新的prod代码,两个分支的最近共同祖先仍为未修复问题的旧提交,因此比较时左侧展示的是共同祖先的旧代码,而非prod当前最新的代码。
验证方式
执行两点diff命令即可对比当前prod最新代码和prod-feature的差异,得到预期结果:
git diff prod..prod-feature | grep hh
修复方案
如果需要让PR比较页左侧显示prod最新代码,将prod-feature分支变基到最新的prod分支HEAD上,更新两个分支的共同祖先即可。
内容的提问来源于stack exchange,提问作者WestCoastProjects
相关产品推荐
相关产品推荐

