冲突文件里看到的是Git在合并或拉取时因同一文件被不同分支修改而产生的冲突标记,包含<<<<<<<、=======、>>>>>>>分隔符及各自版本内容。

冲突文件里看到
这是 Git 在告诉你:它卡住了,没法自动合并,需要你人工决定保留哪边的代码。不是报错,也不是失败,而是暂停状态——工作区文件已标记为“未解决”,git status 会显示 unmerged,且该文件既不在暂存区,也不算干净。
常见错误现象包括:VS Code 底部状态栏出现黄色提示“1 merge conflict”,点击后弹出“Merge Editor”;或者你试图 git commit 却被拒绝,提示“fatal: cannot do a partial commit with conflicts”。
- 不要直接删掉
<<<<<< HEAD到>>>>>> branch-name之间的所有内容——那等于丢掉两边修改 - 也不要只保留一边就立刻
git add——VS Code 的 Merge Editor 默认不会自动标记“已解决”,得手动点“Accept Current Change”或“Accept Incoming Change”才算数 - 如果文件里有多个冲突块,必须逐个处理;漏掉一个,
git commit依然会被拦住
用 VS Code 内置 Merge Editor 快速选边或编辑
VS Code 的 Merge Editor 是目前最顺手的图形化解决方式,比纯文本编辑+命令行更不容易误操作。它把冲突拆成三栏:左侧是你的修改(CURRENT),右侧是对方的修改(INCOMING),中间是结果预览(可直接编辑)。
- 点击某一行左侧的
Accept Current Change按钮,相当于保留你本地的改动,丢弃对方的 - 点击右侧的
Accept Incoming Change,则是用对方版本覆盖你本地的 - 如果两边都要,直接在中间栏手动删掉冲突标记、拼接逻辑——比如左边加了
log('start'),右边加了log('end'),就在中间写两行 - 处理完一个冲突块后,状态栏会实时更新剩余数量;全部清零后,“Resolve Conflict”按钮才变成可用状态
命令行兜底:abort、reset、mergetool 怎么选
当 VS Code 卡死、Merge Editor 不弹出,或你想快速回退重来时,命令行是唯一可靠出口。
- 想彻底放弃这次合并,回到合并前状态:
git merge --abort——这是最安全的“一键撤回”,不改工作区,不丢暂存内容 - 只想重置某个冲突文件到合并前的样子(比如你手改乱了):
git checkout --ours -- path/to/file.js(取自己的版本)或git checkout --theirs -- path/to/file.js(取对方的版本) - 偏好 Beyond Compare / meld 等外部工具:
git mergetool会自动调起配置好的 GUI 工具;但注意,首次使用需先运行git config --global merge.tool meld(以 meld 为例)
为什么解决完还 push 不上去?检查这三个地方
很多人点了“Accept All Incoming”、保存文件、甚至 git add 了,git commit 却仍报错,问题往往不在冲突本身,而在流程断点。
- VS Code 的 Merge Editor 解决完后,必须点右下角的
Accept Merge或按Ctrl+Enter(Mac 为Cmd+Enter)——否则文件只是“看起来好了”,Git 并不认可 -
git commit时不带文件名,只输git commit -m "resolve merge conflict";加路径会报错:“pathspec 'xxx' did not match any files” - 确认
git status输出里已无Unmerged paths,只有Changes to be committed,这时才是真·准备好提交了
真正麻烦的从来不是冲突本身,而是以为“改完了”就结束了——Git 对“解决”的定义非常严格:必须显式标记、暂存、提交,三步缺一不可。漏掉中间任意一环,下次 pull 或 push 还会撞上同一堵墙。


















