必须先pull再commit&push,否则易触发冲突;冲突文件位于源代码管理视图的merge changes区域,含>>>标记;点击“accept current/incoming/both changes”后须手动stage文件并提交。

提交代码前必须先 Pull,否则大概率触发冲突
多人协作中直接 Commit & Push 而不先拉取远程更新,是 VSCode 里最常导致合并失败的操作。Git 不会自动覆盖远程新提交,一旦你和别人改了同一文件的相近位置,Push 就会卡在 rejected 状态,接着就得处理冲突——而这时你可能还没写完备注。
正确顺序是:Pull → 检查“Changes”列表是否干净 → 再暂存(Stage)自己的修改 → Commit & Push。如果 Pull 后发现有新提交,说明别人已经推进了变更,你的本地分支已落后,此时再提交才安全。
- 状态栏右下角显示分支名,点击可快速切换或创建分支,但切换前若有未提交更改,VSCode 会弹窗提示“是否暂存”,别点“丢弃”
- 设置里打开
git.autofetch,能让 VSCode 每隔几分钟自动 fetch 远程引用,分支更新一目了然 - 如果 Pull 失败并提示“Your local changes would be overwritten”,说明你有未暂存的修改,要么
git stash,要么先 Stage 再 Pull
冲突文件出现在“MERGE CHANGES”区域,不是“Changes”
很多人找不到冲突在哪,是因为误看“Changes”标签页。真正的冲突文件统一归类在源代码管理面板顶部的 MERGE CHANGES 区域,图标是红色感叹号 ❗,旁边标注“Conflicting”。这个区域只在 Git 处于合并/拉取中途状态时出现,一旦消失,说明所有冲突已解决或合并被中止。
打开冲突文件后,编辑器里会出现标准 Git 标记:、<code>=======、>>>>>> branch-name。VSCode 会在这些标记行上方悬浮浅灰色按钮,但前提是光标得落在标记行本身或其紧邻行——悬停错位置就看不到按钮。
- 按钮只有三种有效动作:“Accept Current Change”(保留本地)、“Accept Incoming Change”(采用远程)、“Accept Both Changes”(慎用,可能引入重复逻辑)
- 点了按钮不会立刻退出冲突状态;必须回到源代码管理面板,对已处理的文件点击
+号 Stage,Git 才认为该冲突已解决 - 如果文件是二进制(如
.png、.pdf)或项目中定义了.gitattributes指定merge=ours,VSCode 根本不显示冲突块,此时只能切终端执行git checkout --ours -- path/to/file
用 Stash 临时藏起修改,比硬扛冲突更可控
当你正在开发一个功能,但突然需要紧急修复线上 bug,又不想提交半成品,Stash 就是比 git commit -m "wip" 更干净的选择。它把工作区和暂存区的修改打包藏起,让当前分支恢复到最近一次提交的干净状态。
操作路径很固定:源代码管理面板右上角 ⋯ → Stash → 填写备注(比如“WIP: user profile API”)。之后你可以切换分支、Pull、修复、提交,再回来 Pop Stash。如果 Pop 时产生冲突,VSCode 会像普通合并一样在文件中标记,按常规流程处理即可。
- Stash 是栈结构,
Pop默认取最新一条;若要恢复某次特定 stash,得点⋯→Stash→ 展开列表手动选 - 勾选
Include untracked files才能一并暂存新添但未git add的文件,否则 Pop 后它们会丢失 - Stash 不跨窗口同步——你在 WSL 窗口做的 stash,在 Windows 本机 VSCode 里看不到,因为底层 git 仓库不同
三向合并编辑器(3-Way Merge Editor)只在特定条件下激活
VSCode 1.69+ 版本支持的三栏合并视图(CURRENT / INCOMING / RESULT),并不是所有冲突都会自动弹出。它只在你通过 git merge 或 git pull 触发合并时启用,且需满足两个前提:一是设置中开启 git.implicitGitMerge(默认已开),二是右键冲突文件选择“Open in Merge Editor”——单纯双击打开文件,只会进内联冲突视图。
三栏界面真正有用的地方,是逐词对比和拖拽调整。比如远程改了函数名,你改了参数顺序,左右栏能清晰分开这两处变更,中间 RESULT 栏支持你点左侧箭头把函数名拉进来,再点右侧箭头把新参数加进去,不用手动删标记、拼字符串。
- 合并编辑器里没有“保存即解决”的机制;必须显式点击中间栏的
✓ Apply Result按钮,VSCode 才把内容写回原文件并标记为已解决 - 如果你用的是远程开发(SSH/Containers),确保
git.path设置指向容器内的/usr/bin/git,否则编辑器看到的冲突状态和真实 git 状态不一致 - 合并编辑器不支持部分行选择——想只接受对方某一行修改?只能切回内联视图,手动删标记后编辑
真正容易被忽略的是:VSCode 的 Git UI 只负责“呈现”和“辅助选择”,它不替代 Git 的状态机。点了 Accept、删了标记、保存了文件,都不等于冲突结束——必须 Stage 文件,Git 才认可。很多用户反复点按钮却始终卡在 MERGING 状态,问题就出在这一步没做。











