git冲突不是故障而是暂停等待决策;先用git status定位unmerged paths文件,再编辑删冲突标记并融合逻辑,接着逐个git add标记解决,最后git commit完成合并。

远程分支合并冲突不是 Git 故障,而是它在等你确认哪段逻辑该活下来——跳过解决、强制提交或盲目选 --ours,大概率删掉别人刚合入的关键修复。
git pull origin main 报 CONFLICT (content) 怎么快速定位冲突文件
Git 不会只甩一句错误就罢休,它把线索全藏在 git status 里。执行后重点看 “Unmerged paths” 下的条目,比如:
Unmerged paths: (use "git add <file>" to mark resolution) both modified: src/utils/date.ts deleted by them: package-lock.json</file>
这些就是真正在卡住的文件。别信 IDE 状态栏——某些旧版 VS Code 在暂存区混乱时根本不会高亮冲突文件,git status 是唯一可信源。
-
git ls-files -u可列出所有未合并 blob(含 stage 1/2/3),适合写脚本批量处理,但日常没必要 - 如果看到
deleted by them或added by them,说明冲突涉及文件增删,这类冲突光删标记没用,得检查工作区文件是否真的该存在
冲突标记
这些不是乱码,是 Git 划出的决策边界:上面是 HEAD(你当前分支)内容,下面是 >>>>>> branch-name(对方分支)内容,中间 ======= 是分隔线。
- 不能只删三行标记、留下两段代码——语法错误、重复定义、变量未声明都会立刻暴露
- 如果某段逻辑其实已被废弃(比如一个已下线的 API 调用),要连同整块代码一起删,而不是只留标记内“看着干净”的片段
- 改完必须逐个执行
git add <file></file>,否则 Git 仍认为该文件处于冲突状态,git commit会被拒绝
rebase 过程中遇到冲突,和 merge 冲突解决方式一样吗
操作步骤看似一样(找标记 → 编辑 → git add → git rebase --continue),但意图完全不同:
-
merge冲突是融合两条平行开发线,你保留的是双方共存的结果 -
rebase冲突是把你自己的每个提交,一个个挪到新基线上——你每次解决的其实是「这个提交在新上下文里是否还成立」 - 所以
rebase中慎用git checkout --theirs:它取的是目标分支(比如main)的内容,但你正试图把 feature 提交“重放”过去,直接覆盖可能让 feature 的逻辑彻底断掉
git merge --abort 为什么不是万能回退方案
它确实能退出合并、还原工作区和暂存区到 git merge 前的状态,但有两个硬限制:
- 只对尚未
git add的冲突文件有效;一旦你已经git add了部分文件,--abort就不再起作用 - 它不恢复未跟踪文件(untracked files)——比如你在合并过程中手动创建了一个临时配置文件,
--abort不会删它,得自己清理 - 如果冲突涉及 submodule 或 LFS 大文件,
--abort可能留下半初始化状态,需额外运行git submodule update --init或检查 LFS 指针
最常被忽略的一点:冲突从来不是发生在“合并那一刻”,而是发生在两个分支各自偏离共同祖先之后。看清 git merge-base HEAD origin/main 输出的那个 commit,比死磕标记更有助于预判哪里会撞车。











