文章目录
一、遇到冲突时的症状表现
当你在终端看到这样的提示(重点看最后两行):
Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.
(敲黑板)这说明你的代码合并操作遇到了文件级冲突!!!此时千万不要慌,跟着老司机一步步操作就对了~
二、超详细解决流程
步骤1️⃣ 定位冲突文件
运行 git status
命令,你会看到类似这样的输出:
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: app.js
(划重点)这里显示的both modified
文件就是冲突文件,可能有多个文件需要处理
步骤2️⃣ 打开冲突文件
用VSCode或其他编辑器打开app.js,你会看到这样的标记:
<<<<<<< HEAD
const version = "v2.0";
=======
const version = "v1.5";
>>>>>>> feature/new-version
(核心解读):
<<<<<<< HEAD
到=======
之间是你当前分支的代码=======
到>>>>>>> feature/new-version
是要合并进来的代码
步骤3️⃣ 手动解决冲突
(超级重要)必须删除所有冲突标记符!!!保留需要的代码。比如我们想要保留v2.0版本:
// 删除下面三行
<<<<<<< HEAD
const version = "v2.0";
=======
const version = "v1.5";
>>>>>>> feature/new-version
// 改为
const version = "v2.0";
步骤4️⃣ 标记为已解决
处理完所有冲突文件后,执行:
git add app.js
# 如果有多个文件,可以用 git add .
步骤5️⃣ 完成合并
git commit -m "Merge feature/new-version and resolve conflicts"
(注意)此时会自动生成合并提交记录
三、实战演示案例
假设小明和小红同时修改了同一个文件:
场景重现:
- 小明在main分支修改了第10行代码
- 小红在dev分支也修改了第10行代码
- 小红尝试合并main分支到dev分支
此时Git会拒绝自动合并,必须手动解决。解决方案:
- 对比两个人的修改内容
- 根据业务需求选择保留哪个版本
- 或者创造性地整合两个版本的代码
四、高级技巧+避坑指南
可视化工具推荐
- VSCode自带的Git工具(强烈推荐新手使用)
- GitKraken
- Sourcetree
常见问题解答
Q:冲突文件在哪能找到?
A:直接看git status
的输出,或者在项目根目录搜索<<<<<<<
标记
Q:合并错了怎么撤销?
A:使用git merge --abort
一键回到合并前的状态
Q:如何避免频繁冲突?
A:
- 开发前先pull最新代码
- 团队约定代码规范
- 使用功能分支开发
- 及时提交小颗粒度代码
五、预防冲突的三大绝招
- 分段提交法:完成一个小功能就立即提交,别攒着大改
- 沟通预警法:和队友同步修改范围,比如在群里喊一声"我要改utils.js了!"
- 分支隔离法:不同功能开不同分支,像这样:
git checkout -b feature/login git checkout -b feature/payment
(终极提示)遇到复杂冲突时,可以:
- 截图代码段发到工作群讨论
- 使用
git diff
对比差异 - 必要时直接语音沟通
六、延伸思考
当遇到上百个文件冲突时怎么办?(真实案例):
- 优先解决编译错误
- 使用
git checkout --ours/--theirs
批量选择版本 - 借助IDE的全局搜索替换功能
- 分模块逐步解决
最后送大家一句话:冲突不可怕,可怕的是没有版本控制的代码! 遇到冲突正说明你的团队在高效协作呀~
遇到其他Git疑难杂症?欢迎在评论区留言讨论!老司机在线解答~