双点与三点差异的区别
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..B | A 的端点状态与 B 的端点状态 |
| A...B | 共同祖先状态与 B 的端点状态 |
| 等价展开 | git diff $(git merge-base A B) B |
平台 PR 页面展示的通常是三点差异;本地复核对方分支改动时用三点更贴近评审视图。
两点与三点在分支已分叉时结果不同:一个把主干后来的变更也算进差异,另一个只算分支自己带来的部分。
复核他人分支的推荐动作
- git fetch 后先用三点差异 --stat 看整体规模
- --name-only 拿到受影响文件清单,评估风险面
- 按文件逐个细看改动,必要时接 git log -p
- 与平台 PR 页面展示的差异对照,确认判断一致