文章目录
一、血泪现场:当你的代码突然爆炸💥
“CONFLICT (content): Merge conflict in app.js” —— 这个鲜红的错误提示突然出现在终端时,我的手指悬在键盘上僵住了。昨天刚写的登录模块代码,今天怎么就和同事的功能冲突了?此时离版本发布只剩3小时,后脖颈的汗毛都竖起来了!
(真实案例预警)上周团队合并feature分支时,小张修改了用户权限校验的逻辑,而老王在同一文件的相同位置调整了接口鉴权方式。两个人都觉得自己写的代码最优雅,结果合并时Git直接罢工:
<<<<<<< HEAD
const verifyToken = (req) => {
// 新版JWT校验(小张写的)
return jwt.verify(req.headers.authorization, SECRET_KEY);
=======
const checkAuth = (req) => {
// OAuth2.0鉴权(老王写的)
return oauth2.authenticate(req);
>>>>>>> feature/oauth
};
二、解剖冲突:Git到底在闹什么脾气?
1. 冲突的本质是代码的时空错乱
想象两个平行宇宙:你在自己的分支修改了第50行代码,同事在另一个分支也动了同一行。当两个宇宙要合并时,Git就懵逼了——它不知道保留哪个版本,这时候就需要人类介入裁决。
2. 冲突的三种形态(必考!)
- 内容冲突:最常见的文件内容冲突,占比80%以上
- 树冲突:文件被不同分支移动/重命名时发生的路径冲突
- 符号冲突:特殊字符(如UTF-8编码问题)导致的合并错误
3. 查看冲突的三大法宝
# 查看未合并文件列表
git status -uno
# 查看具体冲突内容
git diff
# 终极武器:可视化工具
git mergetool
三、手把手教你拆弹:冲突解决六步法
步骤1:保持冷静并保存现场(重要!)
先别急着改代码!马上执行:
git stash # 保存当前修改
git pull --rebase # 尝试变基合并
步骤2:打开冲突文件找标记
VSCode用户会看到醒目的颜色标注:
- 蓝色:当前分支代码(HEAD)
- 绿色:合并进来的代码
- 红色:冲突区域
步骤3:三选一决策时刻
// 方案A:全盘接受自己的代码
<<<<<<< HEAD
你的代码
=======
别人的代码
>>>>>>>
↓ ↓ ↓
你的代码
// 方案B:拥抱同事的修改
<<<<<<< HEAD
你的代码
=======
别人的代码
>>>>>>>
↓ ↓ ↓
别人的代码
// 方案C:创造性的融合(推荐!)
<<<<<<< HEAD
你的代码
=======
别人的代码
>>>>>>>
↓ ↓ ↓
融合后的超级代码
步骤4:清理战场痕迹
删掉所有<<<<<<<
、=======
、>>>>>>>
标记,就像什么都没发生过一样
步骤5:验证你的缝合术
git add . # 标记冲突已解决
git rebase --continue # 继续变基操作
npm test # 一定要跑测试!(血泪教训)
步骤6:推送到远端完成手术
git push --force-with-lease # 比--force更安全
四、防冲突必杀技:五个让Git变乖的好习惯
-
小步快跑原则
每次提交不超过200行代码,就像吃小笼包要趁热 -
每日同步仪式
早上一来先git pull --rebase
,就像程序员版的晨间咖啡 -
文件分工策略
- 配置文件交给专人维护
- 公共组件修改前先群聊报备
- 自动生成的文件加入.gitignore
-
善用分支保护
在GitLab设置protected branches,防止新人直接推送到主分支 -
代码预告机制
修改关键文件前,先在工作群发个消息:“我要动userService.js了,有人也在改吗?”
五、高阶技巧:当普通招式都不管用时
场景1:二进制文件冲突(.xlsx/.psd)
# 任选一个版本
git checkout --ours logo.psd
git checkout --theses report.xlsx
# 或者用外部工具比较
git difftool -t p4merge logo.psd
场景2:史诗级大冲突(500+文件)
# 使用核武器级重置
git reset --hard origin/main
# 重新应用本地修改
git stash pop
场景3:后悔药怎么吃
# 查看合并前的状态
git reflog
# 回到冲突前的世界线
git reset --hard HEAD@{1}
六、血的教训:那些年我踩过的坑
-
盲目使用–force
某次强制推送导致同事三天的工作成果灰飞烟灭,差点被祭天 -
忽略CI测试
合并后才发现ESLint报错,全组跟着加班改代码 -
误删冲突标记
有次手滑没删干净<<<<<<<
,导致生产环境直接500错误 -
不及时解决冲突
拖延三天后解决,发现要合并的代码比银河还辽阔
七、Git三境界:从菜鸟到大师
-
第一层:见冲突色变
“完了完了,又要改通宵了!” -
第二层:从容应对
“小case,给我5分钟” -
第三层:未卜先知
通过代码评审和规范,让团队冲突率下降90%
(终极秘诀)建议每个团队建立《合并公约》:
- 每天下午4点前禁止合并大功能
- 修改公共库必须发起Merge Request
- 周五不合并,快乐过周末
下次当你再看到那个刺眼的CONFLICT提示时,不妨深吸一口气,露出神秘的微笑——现在的你,已经掌握了让代码世界恢复和平的终极奥义!