Git拉取冲突需主动检查「Git更改」窗口的CONFLICT状态、红色⚠️标签和可用的“解决冲突”菜单;用VS合并工具时须确认基础版本、逐块选择并点击“标记为已解决”;最后必须执行git add和git commit才能push。

Git拉取代码发生冲突,不是“能不能解决”的问题,而是“你有没有看到它、有没有进对地方处理它”。Visual Studio 默认不弹窗、不高亮、不拦你继续写代码——冲突就静静躺在「Git 更改」窗口里,等你主动点进去。
怎么确认 pull 后真有冲突
别信工具栏那个“拉取成功”的提示。真正线索只有三个:
- 「Git 更改」窗口底部状态栏显示
CONFLICT(不是“已修改”或“未同步”) - 左侧「未提交的更改」区域,文件名旁出现红色 ⚠️ 和
Conflicted标签 - 右键该文件,
解决冲突菜单项是可用状态(灰色 = 还没触发冲突流程)
如果只点了顶部“拉取”按钮却什么都没看见,大概率冲突已静默进入未合并状态,必须手动打开「Git 更改」窗口核查。
用 Visual Studio 内置合并工具处理文本冲突
点冲突文件右侧的 解决冲突 → 使用合并工具,会打开三栏视图(本地 / 基础 / 远程)。关键细节:
-
基础是共同祖先版本,不是你本地或远程的任意一方,别删掉它 - 每个差异块上方的
接受传入/接受当前/接受全部按钮,只对当前高亮块生效;接受全部≠ 全文保留 - 手动编辑中间栏(合并结果区)后,必须点
标记为已解决,否则git add不会生效 - VS 里根本不会出现
<<<<<< HEAD这类标记——它是纯可视化操作,不暴露原始冲突符号
命令行兜底:当 VS 合并工具卡死或状态异常
VS 的 Git 集成偶尔因缓存错乱导致按钮无响应,或合并后仍报 CONFLICT。此时切到包管理器控制台或终端执行:
- 先确认真实冲突文件:
git status—— 输出中带both modified:的才是真冲突 - 强制调起命令行合并工具:
git mergetool(需提前配置meld或vscode) - 若只想快速选一边:
git checkout --ours <path>(保留本地)或git checkout --theirs <path>(保留远程)
注意:git checkout --ours 不等于“丢掉所有改动”,它只作用于指定文件;但一旦执行,工作区内容即被覆盖,没有二次确认。
为什么解决完还 push 不了
常见卡点不是冲突没解,而是漏了两步:
- 每解决一个冲突文件,必须单独执行
git add <file>标记为已解决(VS 的“标记为已解决”按钮本质就是帮你做这一步) - 所有冲突文件都
add完后,必须执行git commit生成合并提交;VS 有时会自动帮你 commit,有时不会——看右下角状态栏是否显示“合并提交已创建” - 没 commit 就直接
git push,Git 会拒绝,因为本地分支还没真正完成合并动作
最易忽略的是:你以为点了“标记为已解决”就万事大吉,其实 VS 并不总自动 commit,尤其在批量解决多个文件时,最后那一下 git commit 得自己敲。


















