vscode内置可比对当前分支与master:点击源代码管理→“…”→“compare with branch”→输入master(或main/origin/main),显示文件级差异及行级详情。

怎么用VSCode内置功能看当前分支和master的diff
VSCode自带的源代码管理视图能直接比对分支,不用切终端、不装插件。前提是你的工作区已初始化Git,且master(或main)存在且可访问。
操作路径:左侧活动栏点「源代码管理」图标 → 顶部「...」→ 「Compare with Branch」→ 输入master(或main,注意大小写)。VSCode会立刻列出所有被修改、新增、删除的文件,并支持逐文件点开看行级差异。
- 如果输
master后没反应,大概率是远程分支名不叫master,试试main或origin/main - 这个操作比对的是「当前工作目录状态 + 暂存区」vs
master的HEAD,不包含未跟踪文件 - 右键某个文件 → 「Select for Compare」再选
master,可单独比对单个文件,适合快速验证局部改动
git diff命令在VSCode集成终端里怎么写才准
终端里跑git diff更灵活,但参数错一个,结果就不是你想要的。最常用也最安全的是明确指定两个commit范围:
git diff master...
注意是三个点(...),不是两个。它等价于git diff $(git merge-base master HEAD) HEAD,也就是「从共同祖先到当前分支」的净变更 —— 这才是你真正改了什么。
-
git diff master(两个点)只比工作区 vsmaster,会混入暂存区未提交的改动,容易误判 -
git diff master..HEAD和git diff master...看起来一样,但后者自动找merge base,跨多个合并提交时更可靠 - 如果
master本地不存在(只有origin/master),得先git fetch,否则报错fatal: ambiguous argument 'master': unknown revision
为什么点了Compare却看不到某些文件的差异
常见原因不是VSCode坏了,而是Git本身没把那些文件纳入比对范围。
- 文件被
.gitignore匹配了 → 不会出现在源代码管理面板,也不会进git diff输出 - 文件已
git add但还没git commit→ 它在「暂存区」,VSCode默认比对的是「暂存区+工作区」vsmaster,所以能看到;但如果手动git reset清空了暂存区,它就退回到「仅工作区」状态,此时未git add的修改不会出现在Compare列表里 - 文件权限变更(如
chmod)默认不显示为内容差异,需加-c core.filemode=true或在设置里开git.ignoreLimit
想对比时跳过node_modules、dist这些大目录怎么办
VSCode默认会读取.gitignore,但git diff命令本身不自动跳过——除非你告诉它。最轻量的做法是在终端执行时加--exclude:
git diff master -- . --exclude=node_modules --exclude=dist
注意末尾的.表示「当前目录起」,否则--exclude可能不生效。
- VSCode界面里的Compare不支持临时排除目录,只能靠
.gitignore或提前git update-index --skip-worktree(慎用,会影响协作) - 如果项目用pnpm,还要排除
.pnpm;用yarn v2+,排除.yarn/cache,否则git diff可能卡住或输出巨量无关内容 - 长期方案:把常用排除项写进
.gitattributes,比如node_modules/** diff=none,但团队需同步该配置
分支比对这事,关键不在工具多炫,而在搞清「比的是哪两个快照」「哪些文件实际参与了比对」。一上来就点Compare,很容易把未add的修改、被.gitignore过滤的配置、或者本地没fetch的远程分支当成「没变化」。











