知用网
柔彩主题三 · 更轻盈的阅读体验

合并冲突怎么解决?Git开发中常见问题实战处理

发布时间:2025-12-14 16:19:43 阅读:513 次

合并冲突是怎么发生的

在团队协作开发中,你和同事同时修改了同一个文件的同一段代码,当你尝试把对方的改动合并到自己的分支时,Git 无法自动判断该保留谁的版本,这时候就会提示“合并冲突”。这就像两个人同时改了一份合同,条款不一致,必须人工确认以哪个为准。

比如你正在开发登录功能,修改了 login.js 中的验证逻辑,而同事也在同个文件里调整了错误提示方式。你们各自提交后,执行 git merge feature/login-ui,终端弹出冲突警告,项目里对应文件会看到类似下面的标记:

<<<<<<< HEAD
your code here
=======
their code here
>>>>>>> branch-name

怎么看懂冲突标记

上面那段特殊符号是 Git 插入的冲突分隔符。其中 <<<<<<< HEAD======= 之间是你当前分支的代码,也就是你本地的修改;从 =======>>>>>>> 是要合并进来的别人代码。你需要决定保留哪部分,或者把两者合理整合。

举个实际例子:你在本地添加了手机号校验:

if (!phone.match(/1[3-9]\d{9}/)) {
  alert('请输入正确的手机号');
}

而同事加了空值检查:

if (!phone) {
  alert('手机号不能为空');
}

两个逻辑其实不冲突,正确做法是把两段都保留,顺序上先判空再校验格式。

手动解决冲突的步骤

打开报冲突的文件,找到分隔符区域,删掉 Git 的标记行,然后根据业务需求整理最终代码。比如改成:

if (!phone) {
  alert('手机号不能为空');
} else if (!phone.match(/1[3-9]\d{9}/)) {
  alert('请输入正确的手机号');
}

保存文件后,在终端执行 git add login.js 将其标记为已解决,接着运行 git commit,Git 会自动生成一条默认提交信息,也可以用 -m 参数自定义。提交完成后,这次合并就算完成了。

用编辑器辅助处理

很多人不用命令行直接看文件,而是借助 VS Code 这类工具。VS Code 在顶部会有“Accept Current Change”“Accept Incoming Change”“Accept Both”等按钮,点一下就能快速选择保留哪边,适合不太熟悉语法结构的新手。

WebStorm 或 SourceTree 则提供三窗格对比视图,左边是你当前的,右边是对方的,中间是合并结果,拖动或点击即可同步内容,视觉上更清晰。

避免频繁冲突的小技巧

最有效的办法是勤拉远程更新。每天开工前执行一次 git pull origin main,把自己的主干保持最新,减少后期大范围差异。

另一个建议是拆小功能模块。别一个人闷头写三天再提交,那样积压的改动越多,撞车概率越大。尽量做到每完成一个小功能就推一次,让合并粒度变细。

还有就是约定好公共文件的修改规则。比如大家都改 config.js,可以规定新增配置只能追加在末尾,不能插在中间,降低行号冲突几率。

不小心搞乱了怎么办

如果改着改着发现越理越乱,可以直接放弃当前合并操作。运行 git merge --abort,Git 会把你拉回合并前的状态,所有文件恢复如初,就像什么都没发生过。然后再重新拉一遍代码,冷静分析怎么合更稳妥。