如何比较两个 Git 分支的差异
比较两个分支:git diff 分支A 分支B 看代码差异;git log 分支A..分支B 看 B 独有的提交;git diff A...B(三点)看 B 自分岔点起引入的改动。合并前评审用三点更准确。
看代码差异:git diff 分支A 分支B。看提交差异:git log 分支A..分支B(B 有 A 没有的提交)。 合并前想精确看"这个分支引入了什么",用三点语法 git diff A...B——它从两分支的共同祖先比起,过滤掉 A 后来新增的无关改动。
代码差异
git diff main feature-x # 两分支当前状态的完整差异
git diff main feature-x --stat # 只看文件统计
git diff main feature-x -- src/api/ # 只看某个目录
git diff main...feature-x # 三点:feature-x 自分岔以来引入的改动
提交差异
git log main..feature-x --oneline # feature-x 独有的提交
git log --left-right --oneline main...feature-x # 双向独有提交对比
两点 vs 三点怎么选
- 两点
A..B/git diff A B:直接对比两个端点的最终状态——A 侧新加的、B 侧没有的都会显示为"差异"; - 三点
A...B:从共同祖先(merge-base)到 B——只反映 B 这条线上做的改动。
评审 PR、评估合并影响时用三点;回答"两个分支现在长什么样不同"用两点。
常见问题(FAQ)
Q:不切换分支能比较吗?
能,diff/log 直接接受分支名参数,无需 checkout。这也正是推荐方式。
Q:想生成两个分支差异的补丁文件?
git diff main..feature-x > changes.patch,对端 git apply 即可应用。
Q:IDE 里怎么看?
VS Code 装 GitLens 后有 Branch Compare 视图;JetBrains 的 Git 工具窗选分支 → Compare。本质都是封装的上述命令。