首页/开发/Git 与协作速查/双点与三点差异的区别
合并变基与冲突71 条

双点与三点差异的区别

git diff A..B 比较两个端点;git diff A...B 比较 A 与「A、B 的共同祖先」到 B 的差异,评审 PR 常用三点视角只看引入的变更。

Git 与协作速查开发更新于 2026-10-13

双点与三点差异的区别

git diff A..B 比较两个端点,也就是把 A 与 B 各自的文件状态直接对照;git diff A...B 比较的是共同祖先到 B 的差异,等于只看 B 相对分叉点新增了什么。评审 PR 时通常用三点视角:把对方分支带来的改动单独呈现,而不把主干后来的变更混进来。平台页面展示的 PR diff 一般就是三点差异,本地复核对方分支时用三点更贴近评审视图。

基本信息

双点A..B:端点对端点
三点A...B:从共同祖先到 B
等价写法git diff $(git merge-base A B) B
常用搭配--stat 看规模,--name-only 看文件清单
平台任意 Git 客户端

典型使用场景

  • 复核他人分支带来的改动,只看它相对分叉点新增了什么
  • 对比两次发布之间的净变化
  • 排查两点差异与评审视图不一致的原因
  • 生成变更日志素材时排除主干自身的变动
  • 把文件清单交给测试与运维,评估受影响范围
  • 确认某个分支是否夹带了与主干同步带来的改动

常用示例

常用示例
git diff main...feature           # 只看分支相对分叉点新增的改动
git diff main..feature            # 端点对端点,包含主干后来的变化
git diff main...feature --stat    # 先看规模
git diff main...feature --name-only   # 只看受影响文件清单

两种写法对比

写法比较对象
A..BA 的端点状态与 B 的端点状态
A...B共同祖先状态与 B 的端点状态
等价展开git diff $(git merge-base A B) B
平台 PR 页面展示的通常是三点差异;本地复核对方分支改动时用三点更贴近评审视图。
两点与三点在分支已分叉时结果不同:一个把主干后来的变更也算进差异,另一个只算分支自己带来的部分。

复核他人分支的推荐动作

  • git fetch 后先用三点差异 --stat 看整体规模
  • --name-only 拿到受影响文件清单,评估风险面
  • 按文件逐个细看改动,必要时接 git log -p
  • 与平台 PR 页面展示的差异对照,确认判断一致

易错点

  • 在 A 与 B 已分叉后,两点与三点结果不同,写脚本时先明确要哪一种
  • 三点语法的左侧参数默认取共同祖先,误解为「A 相对 B」会得出相反结论
  • 两分支从未分叉时两点与三点结果相同,容易据此以为两种写法等价
  • 把三点差异当成完整改动清单会漏掉主干侧的变化,评审范围判断需结合上下文
  • 在浅克隆上计算共同祖先可能失败,差异比较前先确认历史完整

数据来源与参考

  • Git 官方文档:git-diff(A..B 与 A...B)
  • Git 官方文档:gitrevisions(三点语法)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌