在团队开发中,几个人同时改同一个文件是常事。你写完一段功能,准备把代码推到远程仓库,结果系统提示提交失败——有人比你快一步,已经更新了相同文件。这时候,你就碰上了典型的远程提交冲突问题。
什么是远程提交冲突
当你本地修改的代码基于一个旧版本,而远程仓库已经被别人更新过,Git 会认为你的提交可能覆盖他人工作,于是拒绝直接推送。这种机制叫远程提交冲突检测,它的目的不是拦你,而是保护协作安全。
比如小李和小王都在开发登录模块。小李先改了 login.js 并成功推送。小王本地没拉最新代码,也改了同一处逻辑,这时他执行 git push,系统就会报错:
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'git@repo.com:project.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally.
这说明远程有新提交,必须先合并再推送。
怎么处理这类冲突
最简单的办法是先拉取远程更新:
git pull origin main
如果改动区域重叠,Git 会在文件中标记冲突段落,像这样:
<<<<<<< HEAD
const loginType = 'phone';
=======
const loginType = 'email';
>>>>>>> abc1234
你需要手动决定保留哪边,或者重新写一行更合适的。改完保存,再执行:
git add login.js
git commit -m "resolve login conflict"
git push origin main
提前避免冲突的小技巧
每天开工前顺手拉一下最新代码,能大幅降低撞车概率。另外,拆分功能模块、约定好接口边界,也能减少多人动同一块代码的情况。
有些团队用 Git 分支策略,比如每个需求开独立分支,开发完成后再合并进主干。这样主分支不会频繁变动,冲突自然少很多。
现代 IDE 也提供了可视化工具,能高亮显示冲突区域,点几下就能选择接受当前修改还是 incoming 修改,对新手友好不少。
远程提交冲突检测不是障碍,反而是协作中的安全网。理解它的工作方式,反而能让团队合作更顺畅。