冲突本质是本地与远程在相同代码位置改动不可自动合并,需人工判断取舍:先用git status确认未解决冲突,再定位文件中>的标记区块,删标记并保留或融合代码,最后git add+git commit完成合并。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当你在团队协作中执行 git pull 或 git merge 时突然看到 “CONFLICT (content): Merge conflict in xxx.js”,说明本地修改和远程版本在相同位置发生了不可自动合并的改动,此时必须人工介入判断取舍——问小白不是真实工具,而是指用最直白的语言、最少预设知识、不跳步地拆解冲突本质与操作路径。
第一步:确认冲突真实存在且尚未解决
运行 git status,查看输出中是否明确列出 “Unmerged paths” 或文件名后带 “both modified” 标记。如果只显示 “Your branch is up to date”,那根本没冲突,别强行处理。
打开终端,输入 git log --oneline --graph --all,快速扫一眼当前分支与目标分支(如 origin/main)的分叉点,确认你确实处在 merge/pull 后的未完成状态。
第二步:定位冲突文件并理解冲突标记
从 git status 输出中抄下所有标为 “Unmerged paths” 的文件路径,例如 src/utils/date.js。
用任意文本编辑器打开该文件,你会看到类似这样的区块:
function formatDate() { return new Date().toISOString(); }<br>=======<br>function formatDate(format) { return moment().format(format); }<br>>>>>>> a1b2c3d
其中 到 <code>======= 是你本地分支的改动,======= 到 >>>>>> 是要合并进来的改动(commit ID 后缀可忽略)。【删掉这三行标记本身是必须动作,但不能只删标记而留两段代码】
第三步:决定保留哪段逻辑,或手动合成新逻辑
方法一:完全采用远程版本(放弃本地修改)→ 删除从 到 <code>======= 的全部内容(含标记),只保留 ======= 下方到 >>>>>> 之间的代码,再删掉这两行标记。
方法二:完全采用本地版本(丢弃对方改动)→ 删除从 ======= 到 >>>>>> 的全部内容(含标记),只保留 上方到 <code>======= 之间的代码,再删掉标记。
方法三:手工融合(推荐多数情况)→ 比如发现本地返回 ISO 字符串、远程支持 format 参数,那就写一个兼容两者的新函数:function formatDate(format) { return format ? moment().format(format) : new Date().toISOString(); },然后把整段冲突区块(含 >>>>>>)全部删干净,只留下这一行新代码。
第四步:标记冲突已解决并提交合并结果
保存文件 → 在终端执行 git add src/utils/date.js(对每个冲突文件都重复此操作)。
运行 git commit,编辑器会自动弹出默认合并提交信息,直接保存退出即可。Git 此时会生成一个合并提交对象,HEAD 指针前移,冲突正式终结。
最后验证:运行 git status,应显示 “nothing to commit, working tree clean”;再跑一遍单元测试或手动检查功能,确保融合后的逻辑行为符合预期。











