GitLens中对比任意两分支需用“GitLens: Compare Commits”命令并手动输入分支名(如"dev"和"release/2.1"),或先切换至其中一分支再右键另一分支选“Compare with Current”。

GitLens里怎么选两个分支做文件级对比
GitLens 的 Compare with Current 是最常用入口,但它默认只对比「当前分支」和「右键选中的那个分支」,不能自由指定任意两个非当前分支。真要对比 dev 和 release/2.1(而你本地正处在 main),得绕一下:
- 先切换到其中一个目标分支(比如
git checkout dev),再在 GitLens 侧边栏的 Branches 节点下右键release/2.1→ 选择Compare with Current - 或者不切分支,直接打开命令面板(
Cmd+Shift+P或Ctrl+Shift+P),输入并执行GitLens: Compare Commits,然后手动粘贴两个分支名(如dev和release/2.1)——这个命令支持任意 commit-ish 表达式 - 注意:如果分支名含斜杠(如
feature/login),务必用引号包裹,否则 GitLens 会解析失败
用 GitLens 查两次提交之间的变动文件列表
GitLens 的 Compare Commits 命令本质是调用 git diff --name-only,所以它列出的是「有变更的文件路径」,不是完整 diff。适合快速扫描范围,不适合逐行审查。
- 执行
GitLens: Compare Commits后,输入两个 SHA(比如a1b2c3d和e4f5g6h),或用相对引用(HEAD~3、origin/main) - 结果以树形结构展示在 GitLens 侧边栏,点击任一文件可跳转到该文件在两个提交间的差异视图
- 如果某次提交是合并提交(merge commit),GitLens 默认使用第一个父提交(
^1)作为基准,想换父提交得手动加^2后缀 - 不支持通配符过滤(比如只看
src/**/api/*.ts),这类需求得回终端跑git diff --name-only a1b2c3d e4f5g6h -- src/
为什么点了“Compare with Current”却看不到文件变动?
常见原因不是操作错,而是 GitLens 没拿到有效比较基准:
- 当前工作目录不在 Git 仓库根目录下(比如开了子文件夹),GitLens 可能无法识别仓库状态 —— 关闭窗口,重新用
File > Open Folder打开整个仓库 - 目标分支在本地没 fetch 过(比如远程有
feat/new-ui,但你没运行过git fetch origin feat/new-ui),GitLens 查不到该分支引用,会静默失败 - 分支名拼写错误或大小写不符(尤其 Windows 下 Git 默认不区分大小写,但 GitLens 严格匹配)
- GitLens 设置里关了
gitlens.advanced.gitCommands,导致部分底层命令不可用 —— 检查设置中是否禁用了高级 Git 功能
比完之后怎么导出变动文件清单?
GitLens 本身不提供导出按钮,但可以借力 VSCode 原生能力:
- 在 GitLens 的对比结果列表上右键 →
Copy File Paths,粘贴到文本编辑器里就是换行分隔的路径列表 - 如果需要带状态(新增/修改/删除),得切到 VSCode 内置的源代码管理视图(
Ctrl+Shift+G),先执行一次Git: Compare Branches,再右键「更改」区域 →Copy Changed File Paths - 真正要生成机器可读的格式(比如 JSON 或 CSV),还是得靠终端:
git diff --name-status main dev > changes.txt,然后把文件拖进 VSCode 查看
容易被忽略的一点:GitLens 的「文件变动列表」是惰性加载的 —— 它只显示顶层路径,不会自动展开子目录里的嵌套改动,除非你手动点击三角箭头。如果你扫一眼没看到预期文件,别急着怀疑配置,先点开目录看看。


















