Files
2026-06-11 03:33:14 +08:00

2.6 KiB
Raw Permalink Blame History

冲突处理详解

识别冲突

当 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. 及时同步代码 - 每天开始工作前拉取最新代码
  2. 小步提交 - 频繁提交小的改动
  3. 功能模块化 - 不同功能在不同文件中实现
  4. 沟通协作 - 避免同时修改同一文件

常见冲突场景

场景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