git分支切换或合并后仍提示冲突,大概率是文件状态未更新到位,并非代码未修改完毕,而是git尚未识别解决动作;需执行git add 标记已解决,否则git status持续显示冲突。

Git分支冲突解决后仍提示冲突,大概率是文件状态没更新到位,不是代码没改完,而是 Git 还没“看到”你已解决。
git status 显示 conflicted,但文件里找不到
这是最典型的“假冲突”现象:你手动删掉了冲突标记、保存了文件,但忘了执行 git add。Git 不会自动把编辑后的文件标记为“已解决”,它只认暂存区(staging area)的状态。
- 运行
git status,确认哪些文件仍处于Unmerged状态(显示为红色,带 “both modified” 或 “deleted by us” 等) - 对每个已编辑完成的文件,必须显式执行
git add <file></file>—— 即使内容完全一样,不add就不算解决 - 如果误删了某行或改错了结构,
git add后再git diff --cached可核对暂存区内容是否符合预期
git merge --continue 报错 “no merge in progress”
说明 Git 已经退出了合并流程,但工作区/索引还残留着未清理的痕迹。常见于中途执行过 git reset、git checkout 或强制关掉终端。
- 先检查是否存在
.git/MERGE_HEAD文件:ls -a .git | grep MERGE,有则说明合并上下文还在 - 若存在
MERGE_HEAD但git merge --continue失败,可尝试git commit直接提交当前暂存区(前提是所有冲突文件都已add) - 若
MERGE_HEAD不存在,但git status仍报冲突,极可能是文件权限或换行符导致 Git 认为“内容不同”——用git ls-files --unmerged查看真实未合并项,再针对性git add
删除了远程有、本地无的文件,却一直卡在 merging
这类冲突不体现在代码块里,而是 Git 对“文件存在性”的分歧。例如你删了 utils/helper.js,但远程分支仍保留它,Git 会记为 “deleted by us” 冲突,且不会插入文本标记。
- 运行
git status,找到标为deleted by us的文件名 - 若确认该文件应删除,执行
git rm <file></file>(不是系统rm) - 若应保留远程版本,执行
git checkout origin/<branch> -- <file></file></branch>拉回文件,再git add - 特别注意 Android Studio / CLion 等 IDE 的“Safe Delete”可能绕过 Git,直接删文件却不触发
git rm,这类操作后务必人工补上命令
真正容易被忽略的是:Git 的“解决冲突”本质是两步动作——改内容 + 更新索引。很多人只做了前半步,就去点 IDE 的 Commit 按钮,结果按钮灰掉或报错,其实缺的只是那一行 git add。











