用 Git 做协作开发时,一不小心就遇到「合并冲突」——文件上标着红色感叹号,命令行跳出一堆 CONFLICT 提示,连 git status 都显示一堆 both modified。别慌,这不是代码坏了,只是 Git 在提醒你:这两份修改它不敢擅自做主,得你来拍板。
先搞清:什么是「冲突状态」?
Git 的「冲突状态」不是错误,而是一种中间态:它已暂停合并流程,把双方改动都保留在工作区和暂存区里,等着你手动处理。这时候执行 git status,会看到类似这样的提示:
Unmerged paths:
(use "git add <file>" to mark resolution)
both modified: src/utils.js
注意关键词:Unmerged paths 和 both modified —— 这就是典型的冲突待处理状态。
三步清除冲突状态(不丢代码)
第一步:打开冲突文件,找标记段落
Git 会在冲突文件里插入三段特殊标记:
<<<<<< HEAD
console.log('这是本地分支的改动');
=======
console.log('这是要合并进来的改动');
>>>>>> feature/login
其中 <<<<<< HEAD 到 ======= 是你当前分支的内容,======= 到 >>>>>> 是对方分支的内容。删掉标记行,只保留你想要的代码(可以全留、全删、或混合改写)。
第二步:标记为已解决
改完保存后,在终端运行:
git add src/utils.js
这时再执行 git status,那行 both modified 就消失了,变成绿色的 modified: src/utils.js,说明 Git 已认可你的选择。
第三步:继续合并或提交
如果是在执行 git merge 中断后清理的,直接运行:
git commit
Git 会自动弹出默认提交信息(比如 Merge branch 'feature/login'),保存退出即可完成合并。如果只是想放弃这次合并,用:
git merge --abort
它会一键退回合并前的状态,所有冲突标记、未暂存改动都会被清除干净。
常见误区提醒
❌ 直接删掉整个冲突文件再 git add —— 这样会丢失对方分支的改动;
❌ 只改了代码但忘了 git add —— 冲突状态不会消失;
❌ 执行 git reset --hard 强刷 —— 可能误删自己刚写的修改。
✅ 记住口诀:看标记 → 改内容 → git add → git commit 或 git merge --abort。
小技巧:VS Code 打开冲突文件时,底部状态栏会直接出现「Accept Current Change」「Accept Incoming Change」等按钮,点几下就能快速选边,比手动删标记快得多。