2.6 KiB
2.6 KiB
冲突处理详解
识别冲突
当 Git 无法自动合并时,会标记冲突:
<<<<<<< HEAD
// 当前分支的代码
const name = '张三'
=======
// 要合并的分支的代码
const name = '李四'
>>>>>>> feature/user-management
解决冲突步骤
1. 查看冲突文件
git status
2. 手动编辑文件,解决冲突
打开冲突文件,找到冲突标记(<<<<<<<、=======、>>>>>>>),手动编辑选择保留的内容或合并两者。
3. 标记已解决
git add <file>
4. 完成合并
# 对于 merge 冲突
git commit
# 对于 rebase 冲突
git rebase --continue
冲突处理策略
保留当前分支版本
git checkout --ours <file>
git add <file>
保留传入分支版本
git checkout --theirs <file>
git add <file>
放弃合并
# 放弃 merge
git merge --abort
# 放弃 rebase
git rebase --abort
预防冲突的最佳实践
- 及时同步代码 - 每天开始工作前拉取最新代码
- 小步提交 - 频繁提交小的改动
- 功能模块化 - 不同功能在不同文件中实现
- 沟通协作 - 避免同时修改同一文件
常见冲突场景
场景1:同一文件不同位置修改
这种情况 Git 通常能自动合并,无需人工干预。
场景2:同一行不同修改
需要手动决定保留哪个版本或合并两者。
场景3:文件重命名
Git 通常能智能识别,但如果一个分支重命名而另一个分支修改内容,可能需要手动处理。
场景4:二进制文件冲突
对于图片、PDF 等二进制文件,需要决定保留哪个版本:
# 保留当前分支的版本
git checkout --ours image.png
# 或保留传入分支的版本
git checkout --theirs image.png
冲突解决工具
使用 merge 工具
# 配置合并工具
git config --global merge.tool vimdiff
git config --global mergetool.prompt false
# 使用合并工具
git mergetool
使用 diff 工具
# 查看详细差异
git diff --ours
git diff --theirs
git diff --base
Rebase 冲突特殊处理
Rebase 时冲突会逐个提交出现,处理方式:
git rebase develop
# 冲突1 -> 解决 -> git add -> git rebase --continue
# 冲突2 -> 解决 -> git add -> git rebase --continue
# ...
# 直到完成
如果某一步想跳过:
git rebase --skip
如果整体想放弃:
git rebase --abort