不能直接用Sublime的Find All清理Git冲突标记,因为冲突标记成对出现且中间内容结构不固定,Find All仅支持单行线性匹配,无法跨行捕获完整冲突块,手动删除易漏删或多删导致语法错误或提交失败。

为什么不能直接用 Sublime 的 Find All 清理冲突标记
因为 Git 冲突标记是成对出现的,且中间内容结构不固定:<<<<<< HEAD、=======、>>>>>> feature/xxx 三段之间可能夹着任意行数、任意缩进、甚至空行或注释。Sublime 的 Find All 默认只做线性匹配,一次只能选中单行,无法跨行捕获完整冲突块。更糟的是,如果文件里有多个冲突,手动逐个删标记极易漏掉某个 <<<<<< 或多删一个 =,导致语法错误或 Git 拒绝提交。
用正则一次性选中整个冲突块(含内容)
在 Sublime 的「Find」面板中启用 Regular Expression(Alt+R),输入以下正则:
^<<<<<< HEAD(?:\n(?!^>>>>>>|^(?:=){7}|^<<<<<<).*)*\n=======\n(?:\n(?!^>>>>>>|^(?:=){7}|^<<<<<<).*)*\n>>>>>> [^\n]*$
说明与注意事项:
- 它能匹配从
<<<<<< HEAD开始、到>>>>>> branch-name结束的完整块,中间跳过任何新起的冲突标记 - 不匹配嵌套冲突(极罕见),但日常开发中几乎不会出现
- 若文件用 CRLF 换行(Windows),需确保 Sublime 的换行符设置为
DOS,否则\n匹配失败 - 匹配后按
Ctrl+Shift+K可一键删除所有选中块——但注意:这会同时删掉你本想保留的代码,仅适合“全留 HEAD”或“全留 REMOTE”的极端场景
安全做法:分步匹配 + 手动决策
真正稳妥的方式不是一键清空,而是分三步定位、再人工取舍:
- 第一步:匹配所有冲突头 ——
^<<<<<< HEAD$,勾选Match Case和Whole Line,快速跳转到每个冲突起点 - 第二步:用
Ctrl+Shift+P→Expand Selection to Brackets(或手动Ctrl+Shift+↑多次),把光标所在冲突块完整选中 - 第三步:观察两侧代码,删掉不需要的部分和三行标记,只留最终版本;特别注意函数定义、缩进层级、末尾逗号等易错点
这样既利用了正则的定位能力,又保留了人工判断权。比依赖插件自动合并更可控,也比纯肉眼扫快得多。
清理后必须验证的两个动作
正则删完标记只是开始,Git 不认“看起来没冲突”,只认状态:
- 保存文件后,必须运行
git add <filename>——git add .容易误提临时文件或未修改文件 - 执行
git status,确认该文件不再出现在Unmerged paths下;若仍显示both modified,说明某处标记没删干净,或文件编码被意外改写(比如 UTF-8-BOM)
最常被忽略的是:Sublime 默认保存为 UTF-8,但某些旧项目要求 ASCII 或 Latin-1。如果冲突文件原有编码非 UTF-8,保存后 Git 会认为“内容全变了”,导致后续 diff 失真。遇到奇怪的二进制差异,先查 file -i <filename>。


















