手动解决冲突
手动解决冲突是最直接的方式,直接编辑冲突文件选择保留的内容。
解决冲突步骤
Bash
1. 查看冲突文件
2. 打开文件,找到冲突标记
3. 编辑文件,保留正确内容
4. 删除冲突标记
5. 保存文件
6. git add 标记已解决
7. git commit 完成合并
详细操作流程
步骤1:查看冲突
Bash
git status
# 输出
Unmerged paths:
both modified: src/main.go
步骤2:打开冲突文件
Go
# 使用编辑器打开
vim src/main.go
code src/main.go
步骤3:查看冲突内容
Go
func login() {
<<<<<<< HEAD
console.log("Login from main");
=======
console.log("Login from feature");
>>>>>>> feature
}
步骤4:编辑解决
Bash
// 选择需要的版本,删除标记
func login() {
console.log("Login from feature");
}
步骤5:标记已解决
Bash
# 添加已解决的文件
git add src/main.go
# 查看状态确认
git status
步骤6:完成合并
Bash
# 所有冲突解决后提交
git commit
# 或指定提交信息
git commit -m "解决合并冲突"
解决策略选择
| 策略 | 适用场景 |
|---|---|
| 保留 HEAD | 当前分支的修改更正确 |
| 保留合入分支 | 合入分支的修改更正确 |
| 合并两者 | 两个修改都需要保留 |
| 完全重写 | 两边都有问题,重新编写 |
使用 Git 命令快速选择
Bash
# 接受当前分支版本(ours)
git checkout --ours src/main.go
# 接受合入分支版本( theirs)
git checkout -- theirs src/main.go
# 仍需 git add 标记
git add src/main.go
解决删除冲突
Bash
# 一方删除,一方修改
# 如果决定保留文件
git add src/file.go
# 如果决定删除文件
git rm src/file.go
解决多处冲突
Bash
# 一个文件多处冲突,逐个解决
# 或使用 mergetool
git mergetool
# 或使用图形化编辑器
# VSCode、IDEA 都有冲突高亮功能
验证解决结果
text
# 确认没有冲突标记
grep -r "<<<<<<< HEAD" .
# 无输出表示已解决
# 查看状态确认
git status
# 输出应无 "Unmerged paths"
解决所有冲突后再 commit,否则 Git 会提示还有未解决的冲突。
要点总结
- 编辑冲突文件,删除标记,保留正确内容
git checkout --ours/-- theirs快速选择版本git add标记文件已解决- 删除冲突用
git rm - 所有冲突解决后
git commit
📝 发现内容有误?点击此处直接编辑