直接看代码改了哪些行用 git diff branch1 branch2;确认 branch2 比 branch1 多哪些 commit 必须用 git log branch1..branch2;二者职责不同,混用会漏关键信息。

直接看代码改了哪些行,用 git diff branch1 branch2;想确认“branch2 比 branch1 多提交了哪些 commit”,必须用 git log branch1..branch2 —— 这俩命令干的事完全不同,混用会漏掉关键信息。
git diff branch1 branch2 显示的是文件内容差异
这是最常用、也最容易误读的命令。它对比的是两个分支最新提交所指向的 tree 对象,逐行输出增删改内容,但不体现 branch2 独有而 branch1 完全没有的文件(比如 branch2 新建了一个 utils/date.js,git diff 不会列出这个文件,除非它被修改过)。
-
git diff branch1 branch2:显示 branch2 相对于 branch1 的所有行级变更(含上下文),适合 Code Review 前通读 -
git diff branch1 branch2 --stat:只列文件名和增删行数,快速评估改动规模 -
git diff branch1 branch2 --name-only:只输出变动的文件路径,适合配合脚本做后续处理 -
git diff branch1 branch2 --name-status:额外标出 A(新增)、M(修改)、D(删除)状态,比--name-only更准 - 注意顺序:
git diff a b是 “b 相对于 a 的变化”,不是对称操作
git log branch1..branch2 查的是提交历史差异
git log 看的是 commit 图谱,不是文件快照。双点语法 .. 表示“在右边分支存在、但不在左边分支可达路径上的提交”。它不管这些 commit 改了什么文件,只管有没有这个 commit 节点。
监控一个或多个 GitCode 仓库的 PR,通过 OpenClaw Gateway 自动执行 AI 审查,发布 PR 评论,并发送钉钉和企业微信通知。
-
git log branch1..branch2:列出 branch2 有、branch1 没有的全部 commit(即 branch2 独有的功能/修复) -
git log branch1..branch2 --oneline --graph:带拓扑图的简洁视图,避免误判合并提交的归属 - 如果 branch2 是通过 squash merge 合入的,
git log branch1..branch2可能只显示一个 commit,但git diff仍会展开全部实际变更 - 不要用
git log branch1 branch2(无..)——它会把两个分支的所有 commit 都列出来,无法区分归属
想只比“分叉之后”的改动?用三点语法 git diff branch1...branch2
双点是“branch2 相对于 branch1 的最新快照”,三点是“branch2 相对于 branch1 和 branch2 的最近共同祖先(merge base)的快照”。后者更贴近“这个特性分支到底加了啥”的直觉。
-
git diff branch1...branch2:自动找出branch1和branch2的最近共同祖先,再对比该祖先到branch2的变化 - 特别适合 feature 分支对比 main:避免把 main 上其他人合入的提交带来的文件变更也混进来
- 等价于:
git diff $(git merge-base branch1 branch2) branch2 - 注意:如果两个分支还没分叉(比如 branch2 刚从 branch1 checkout 出来),
git merge-base会返回 branch1 的 HEAD,此时三点和双点结果一样
跨仓库或远程分支怎么比?先 fetch,再当本地 ref 用
Git 默认只认当前仓库的 ref。想比 repoA/support/v1 和 repoB/main,不能直接 git diff。
- 在 repoA 中执行:
git remote add repoB /path/to/repoB.git(或 HTTPS/SSH URL) - 拉取 repoB 的所有分支:
git fetch repoB,此时repoB/main就成了本地可访问的 ref - 再运行:
git diff origin/support/v1 repoB/main,和同仓库操作完全一致 - 别用
git diff直接比两个本地文件夹路径——Git 不识别那种语义,会报错或返回空
真正容易被忽略的点是:你看到的“差异”到底是“代码变了”,还是“提交多了”,取决于你用的是 diff 还是 log。这两个命令底层模型不同,强行混用会把人绕晕——尤其在 CI 脚本里写错参数,可能让自动化检查漏掉新增文件或跳过关键提交。










