VS Code 比较文件,先分清你到底要比什么

很多人说“想在 VS Code 里比较两个文件”,但这个“比较”其实可能是三件完全不同的事:

  1. 看两个文件哪里不一样
  2. 找两个文件里共同出现的内容
  3. 看同一个文件在 Git 历史里的变化

如果一开始没分清,后面就很容易在错误的工具上浪费时间。

1. 想看差异:直接用 VS Code 内置 Diff

这类需求最常见,比如:

  • 两个配置文件有什么不同
  • 两版文案改了哪里
  • 两段代码删了什么、加了什么

用法很直接:

  • 右键第一个文件,选择“Select for Compare”
  • 再右键第二个文件,选择“Compare with Selected”

这时候 VS Code 给你的就是标准的 Diff 视图。

一句话总结:

想看哪里改了,用内置比较就够。

2. 想找共同内容:这不是 Diff,是交集

这个场景也很常见,比如:

  • 两批 URL 有没有重复
  • 两份 ID 列表哪些同时存在
  • 两个文本文件里哪些行是一样的

如果文件是“一行一个值”,最省事的办法不是装插件,而是直接跑命令。

macOS / Linux / Git Bash:

1
comm -12 <(sort -u a.txt) <(sort -u b.txt)

如果要输出成文件:

1
comm -12 <(sort -u a.txt) <(sort -u b.txt) > common.txt

Windows PowerShell:

1
2
3
$a = Get-Content .\a.txt | Sort-Object -Unique
$b = Get-Content .\b.txt | Sort-Object -Unique
Compare-Object $a $b -IncludeEqual -ExcludeDifferent | ForEach-Object { $_.InputObject }

这里的重点是:

Diff 适合“看不同”,交集命令适合“拿结果”。

不要混着用。

3. 想看 Git 历史:切到 Git 视角

还有一种情况,表面上你在比较文件,实际你想知道的是:

  • 这个文件在两个提交之间怎么变了
  • 两个分支上的版本有什么差异
  • 某段代码是谁改的

这时候普通文件比较就不够了,更适合直接用 Git。

比如:

1
2
3
git diff
git diff branch-a..branch-b
git diff commit1 commit2 -- path/to/file

如果你经常要看文件历史、提交差异、代码 blame,VS Code 里加上 GitLens 会更顺手。

4. 最省事的判断方法

以后再遇到“比较文件”这个需求,先问自己一句:

我是想看差异,还是想拿结果,还是想追历史?

对应关系其实很清楚:

  • 想看差异:VS Code 内置 Diff
  • 想拿共同项:命令行求交集
  • 想追改动过程:Git / GitLens

工具并不难,难的是一开始把需求说混了。

把目标拆开,后面的选择就简单很多。