文章目录
一、当代码"打架"了怎么办?
“卧槽!我的代码被覆盖了!!!” 这是每个程序员都经历过的噩梦时刻。Git冲突就像办公室里的抢会议室大战——当两个开发人员同时修改同一段代码时,冲突就不可避免了(别问我怎么知道的,说多了都是泪)。
最近团队里刚来的实习生小王就踩了这个坑:他在feature分支修改了用户登录模块,结果合并到dev分支时发现:
<<<<<<< HEAD
const login = (username, password) => {
=======
async function login(username, password) {
>>>>>>> feature/login
这种"代码打架"的场景,老铁们是不是看着特别眼熟?(手动狗头)
二、冲突解决的"三板斧"
1. 手动合并的艺术
直接打开冲突文件,你会看到Git贴心的标记:
<<<<<<< HEAD
当前分支代码=======
分隔线>>>>>>> branch-name
合并分支代码
处理步骤(划重点):
- 删除所有冲突标记(别留尾巴!)
- 保留需要的代码版本
- 或者融合两个版本的逻辑
举个真实案例:上周我合并支付模块时遇到:
// HEAD版本使用微信支付v2
const payment = new WechatPayV2();
// feature版本升级到v3
const payment = new WechatPayV3();
最后解决方案:保留v3版本,但添加v2的fallback逻辑,完美兼容!
2. 图形化工具大比拼
- VS Code内置的冲突解决工具(新手友好)
- SourceTree(可视化操作神器)
- GitKraken(颜值即正义)
个人推荐用VS Code解决简单冲突,它的三窗格视图简直不要太直观:
![VS Code冲突解决界面示意图]
3. 命令行高手的玩法
# 查看冲突文件列表
git status
# 使用mergetool(需要提前配置)
git mergetool
# 完成合并后提交
git commit -m "解决合并冲突"
(注意:meretool默认会生成.bak备份文件,记得清理!)
三、进阶防冲突指南
1. 预判冲突的骚操作
- 每天早上的第一件事:
git pull --rebase
- 功能开发用特性分支(feature branch)
- 小步快跑式提交(别当代码囤积者!)
2. 团队协作黄金法则
- 修改文件前先
pull
- 公共库文件修改要群内报备
- 使用
.gitattributes
文件配置合并策略
*.json merge=union
*.lock binary
3. 当冲突不可避免时…
试试这些救命命令:
# 放弃本次合并
git merge --abort
# 用指定分支覆盖当前代码
git reset --hard origin/dev
# 查看修改记录
git reflog
四、真实战场案例分析
去年双十一大促前的惊魂夜:商品服务同时有3个分支在改库存逻辑。凌晨2点的会议室里,我们是这样操作的:
- 建立临时应急分支
hotfix/stock
- 用
git cherry-pick
摘取关键提交 - 通过
git diff branch1..branch2
对比差异 - 最终采用策略模式重构库存计算逻辑
结果:0故障完成大促,性能提升40%!(此处应有掌声)
五、防冲突终极奥义
- 模块化开发(高内聚低耦合)
- 代码规范先行(ESLint+Prettier安排上)
- 持续集成流水线(每天自动构建)
- 善用
.gitignore
(别让垃圾文件进仓库)
最后送大家一句话:冲突不可怕,可怕的是没有版本控制!下次遇到CONFLICT
提示时,记得深呼吸,然后优雅地敲下解决命令~(比心)