Skip to content

第 9 章 冲突不可怕:亲手拆一次"炸弹"

**冲突(Conflict)**的发生条件只有一个:两边改了同一处,Git 不敢替你们做主。本地和网页各改了 README 的同一行;你的分支和 main 动了同一个函数;你和 AI 一人一版——都会触发。合并或 pull 时,Git 停下来,把球踢给你。

它的样子第一次见很吓人,看懂了就只是个填空题。冲突的文件里会出现这样的标记:

<<<<<<< HEAD
你这边的版本
=======
对方那边的版本
>>>>>>> feat-search

翻译过来就是 Git 在摊手:"上面是你的,下面是他的,你俩自己挑。"拆弹三步:一,做决定——留你的、留对方的,或者动手把两边融成一版;二,删标记——那三行 <<< === >>> 是 Git 的便签,决定完必须删干净;三,收尾——保存、add、commit,冲突解除。VS Code 会把冲突高亮并给出"采用哪边"的快捷选项,点起来更省事——但原始标记必须看得懂,因为 AI 解决冲突时,日志里出现的就是这些原文。

说到让 AI 解冲突:可以,但你要审一件事——两边的意图是否都活了下来。AI 最容易犯的错是为了让红线消失而随手丢掉一边的改动,表面干净,实际丢了功能。审查时别看标记删没删,要看两边原本想做的事是否都还在。

最后是预防,三个习惯让冲突几乎绝迹:动手前先 pull(第 6 章的终生习惯);小步提交、勤推送,别攒一大包;分支短命——开了尽快合,拖得越久和 main 的分歧越大。

关键领悟

冲突不是事故,是 Git 在保护你——它宁可停下来问,也不敢替你猜。拆过一次弹的人,从此不怕这三行标记。

试一试

playground 里自造一次冲突:网页上改某行,本地改同一行并 commit,然后 git pull——亲手把它拆掉。

由 Charles Tao 与 Claude 协作写成——这本身就是这套书讲的工作方式。 · 许可