只有点击“暂存的更改”里的文件才能看到“暂存区 vs 工作区”的真正 diff;点击“更改”里的文件默认对比“工作区 vs 磁盘文件”,未保存时高亮可能不准确或缺失。

源代码管理侧边栏里点哪个文件才能看到真正 diff
不是所有“带修改图标”的条目点开都显示你想要的差异。VSCode 的源代码管理面板分三块:更改(未暂存)、暂存的更改(已 git add)、未跟踪的文件。只有点了 暂存的更改 里的文件,才对比“暂存区 vs 工作区”;点了 更改 里的文件,默认对比的是“工作区 vs 磁盘文件”——也就是你改了但没保存时的内容,此时高亮可能不准确甚至不出现。
常见错误现象:Ctrl+Shift+D 打开面板后点文件只看到全量内容、没高亮差异。原因通常是:文件没保存(先按 Ctrl+S),或该文件还没被 Git 跟踪(git status 不显示它),或根本没 git add 过。
- 务必确认左下角状态栏显示分支名(如
main),否则不是有效 Git 工作区 -
未跟踪的文件点开是纯文本视图,不触发 diff - 右上角若误启用了
Split Editor,diff 可能被挤到另一个编辑器组里,导致看不见
“Changes fromBase” 视图为什么比原生面板更省事
原生面板默认只显示当前分支的本地变更,想看“这个分支相比 main 多了哪些文件”,得切终端敲 git diff main --name-status。而插件 vsx-git-diff-from-main 在侧边栏新增一个 Changes fromBase 视图,直接列出当前分支相对于基准分支(默认 main)的所有变更文件——包括已提交、已暂存、未暂存的全部改动,且自动过滤掉仅在当前分支存在但 main 没有的新文件(比如测试用的临时脚本)。
它不替换原生功能,只是补上那个高频但原生没做好的“跨分支文件级概览”。启用后,你不用记命令、不用切窗口、不用猜哪边是 base 哪边是 head。
- 插件默认 base 分支是
main,可在设置里改成master或其他分支名 - 它只读取 Git 状态,不修改任何东西,和原生 Git 扩展完全兼容
- 如果当前分支没设置上游(upstream),它会 fallback 到本地
main,不会报错但可能不符合预期
Compare Branches 命令到底对比哪两边
执行 Git: Compare Branches(快捷键 Ctrl+Shift+P 输入触发)时,VSCode 先问你“目标分支”,再问“源分支”。注意:它默认把**当前检出分支当作源**,你填的分支是目标——也就是说,结果展示的是“当前分支有哪些内容不在目标分支里”,等价于 git diff target..current,不是 current..target。
这个顺序直接影响增删行的正负号:绿色(+)是你分支独有的新增,红色(-)是你分支删掉但目标分支还保留的内容。如果填反了,diff 颜色和语义就全拧了。
- 想看 feature 相比 main 新增了什么 → 当前在 feature 分支,填
main为目标分支 - 想看 main 相比 feature 缺少什么 → 得先切换到 main,再填
feature为目标分支 - 命令行验证时用
git diff main..feature,和 VSCode 逻辑一致
GitLens Search & Compare 视图适合查什么
原生比较只给文件列表和逐个 diff,GitLens 的 Search & Compare 视图专治“我改了啥但忘了在哪”的场景。它能基于关键词、作者、日期范围,在多个分支或提交范围内搜索变更,并把匹配到的 diff 行聚合展示——比如搜 API_KEY,它会把所有含这个词的修改行(不管在哪个分支、哪个文件)列出来,点一行直接跳转。
这不是替代分支对比,而是补充:当你怀疑某段逻辑被改过但不确定位置,或者要审计敏感词是否残留时,它比手动翻几十个 diff 文件快得多。
- 必须安装 GitLens 插件,且仓库已初始化 Git
- 搜索结果里的 diff 行点击后,打开的是只高亮那一行的迷你 diff 视图,不是全文件
- 它不显示未提交的本地改动,只查已提交的历史记录











