如何使用 git rebase 解决 PR 冲突

135 阅读3分钟

使用 git rebase 解决 PR 冲突指南

🎯 场景说明

在提交 Pull Request(PR)过程中,如果目标分支(如 main)已被其他团队成员合并了新的更改,你的分支可能会与最新主干代码产生冲突。

此时,推荐使用 git rebase 将你的变更“重新应用”到最新的 main 分支上,以保持提交历史清晰并解决冲突。

建议:使用代码编辑器(如 VS Code、IntelliJ IDEA、WebStorm 等)处理冲突,可视化界面能更直观地对比差异、选择保留逻辑,大幅提升效率和准确性。


🔁 操作流程:基于 main 基线执行 rebase

步骤 1:更新本地 main 分支

确保本地的 main 分支是最新状态:

# 切换到 main 分支
git checkout main

# 拉取远程最新代码
git pull origin main

步骤 2:切换回你的功能分支并执行 rebase

# 切换到你的功能分支
git checkout feature/user-profile

# 基于最新的 main 执行变基
git rebase main
示例输出(存在冲突):
Auto-merging src/app/models/user.go
CONFLICT (content): Merge conflict in src/app/models/user.go
Auto-merging web/src/views/Profile.vue
CONFLICT (content): Merge conflict in web/src/views/Profile.vue
error: could not apply def456e... feat(profile): add avatar upload

hint: Resolve conflicts manually, then run "git add <file>" followed by "git rebase --continue".
hint: To abort and restore the original branch, run "git rebase --abort".
Could not apply def456e... feat(profile): add avatar upload

⚠️ 此时 Git 暂停 rebase,等待你解决冲突。


步骤 3:在代码编辑器中解决冲突(推荐方式)

✅ 推荐工具:
  • VS Code:内置 Git 冲突合并器
  • IntelliJ IDEA / WebStorm / GoLand:图形化合并工具
  • Vim / Emacs:高级用户可用 vimdiff
🔍 操作步骤(以 VS Code 为例):
  1. 打开提示中列出的冲突文件(如 user.goProfile.vue)。
  2. 编辑器会高亮显示冲突区域,格式如下:
<<<<<<< HEAD
func SaveUser(name string) { /* 当前 main 的逻辑 */ }
=======
func SaveUser(name, email string) { /* 你新增的参数 */ }
>>>>>>> def456e... feat(profile): add avatar upload
  1. 在编辑器中点击 Accept Current ChangeAccept Incoming ChangeAccept Both Changes,或手动编辑保留所需逻辑。
  2. 保存文件。

💡 优势

  • 可视化对比“当前版本”(main)与“传入版本”(你的更改)
  • 一键选择保留哪一部分,避免手动删除标记出错
  • 支持预览合并结果,减少误操作

步骤 4:标记冲突已解决并继续 rebase

对每个已解决的文件执行:

git add src/app/models/user.go
git add web/src/views/Profile.vue

然后继续 rebase:

git rebase --continue

📝 系统会恢复你原来的提交信息,确认无误后保存即可。


步骤 5:强制推送更新到远程分支

rebase 完成后,提交历史已被重写,需强制推送到远程:

git push -f

✅ 此操作会自动更新你的 PR,使其基于最新 master,冲突消失。


🛑 紧急情况:放弃 rebase

如果你在处理过程中想回到初始状态:

git rebase --abort

执行后,分支将恢复到 rebase 开始前的状态,一切如初。


💡 最佳实践建议

建议说明
✅ 使用 IDE 处理冲突图形化工具更安全、高效,尤其适合复杂文件
✅ 定期同步 main减少后期冲突数量和复杂度
✅ 提交粒度小小而清晰的提交更容易 rebase 和审查
✅ 避免对公共分支 rebase仅对自己分支操作,避免影响他人

📚 总结

操作命令
更新主干git checkout main && git pull origin main
执行 rebasegit rebase main
解决冲突后继续git add <file> && git rebase --continue
放弃 rebasegit rebase --abort
推送更新git push -f origin your-branch

强烈建议:在代码编辑器中解决冲突,利用其可视化对比功能,快速、准确地完成合并,避免文本标记遗漏或逻辑错误。