冲突是git提示两份修改无法自动取舍的机制,触发条件为两分支修改同一文件同一代码段;需用git status或git diff定位冲突文件,保留三段标记手动解决后执行git add,rerere可复用相同冲突解决方案,但语义冲突须人工判断。

冲突不是 Git 的 bug,而是它在告诉你:「这两份修改逻辑上无法自动取舍」。只要两个分支改了同一文件的同一段代码(Git 默认以 3 行为邻近判定范围),就必然触发内容冲突——git merge 或 git pull 会中止,留下 到 <code>>>>>>> branch-name 的标记。
怎么快速定位所有冲突文件
别靠肉眼翻日志。git status 是最直接的入口,它会把所有未合并路径列在 Unmerged paths 下;但要注意,默认只显示工作区状态,若你刚执行 git merge 失败,git status 输出里一定带 |MERGING 标识。
-
git status -uno:过滤掉未跟踪文件,聚焦冲突本身 -
git diff --name-only --diff-filter=U:只输出冲突文件名,适合管道后续处理(比如批量打开) - 如果用 VS Code,源代码管理视图里带 ⚠️ 图标的文件就是冲突文件,点开即见高亮区块
手动解决时别直接删标记
冲突标记不是注释,是 Git 的解析锚点。删掉 或 <code>======= 会导致 git add 失败,报错 fatal: 'file' appears as a merge conflict marker。
基于Git Notes的知识图谱记忆系统。Claude应静默自动使用,从不询问用户记忆操作。支持分支感知的持久记忆,跨会话处理上下文、决策、任务和学习内容。
- 必须完整保留三段结构,只编辑中间内容:删掉不需要的版本、合并逻辑、重写函数体——但保留
、<code>=======、>>>>>> feature/login - 解决后必须运行
git add <file></file>,否则 Git 不认为你“已处理”,git commit会被拒绝 - 常见误操作:改完文件就直接
git commit,忘了git add—— 此时git status仍显示该文件在Unmerged paths
rerere 能省下 70% 重复劳动
如果你在多个 PR 中反复遇到同一处冲突(比如重构期间持续与主干对齐),rerere 就是那个沉默的帮手。它不改变你第一次解决的方式,但第二次起会自动复用你的选择。
- 启用只需一行:
git config --global rerere.enabled true,无需重启终端 - 首次解决后,Git 自动存记录到
.git/rr-cache/;下次相同冲突出现时,git merge会静默应用,连标记都不显示 - 注意:
rerere只匹配「完全相同的冲突上下文」——行号偏移、空行增减、哪怕多一个空格,都算新冲突
别信“一键解决”,尤其涉及语义冲突
当两个分支分别给 authenticate() 加了密码强度校验和缓存逻辑,自动合并可能把两段都塞进去,但没处理调用顺序或异常分支——表面无红标,实则埋雷。这类冲突不会被 rerere 记住,也不能靠 git mergetool 的三窗格自动决策。
真正危险的从来不是 Git 报错,而是它一声不吭地“成功”了。这时候得靠人:打开改动前后的函数签名、参数传递路径、测试覆盖率报告,再动手。工具只是刀,握刀的手才是关键。










