✅Git 冲突处理策略(最佳实践)
冲突不可怕,关键是:定位冲突 → 分析冲突 → 解决冲突 → 测试 → 提交
只要按下面的步骤走,一次就能干干净净解决。
🔥一、常见冲突出现的场景
- git pull / git pull --rebase 时
- git rebase某个分支时(最常见)
- git merge某个分支时
- 多人改了同一个文件的同一段代码
🧭二、遇到冲突时的通用流程
步骤 1:知道哪里冲突了
Git 会告诉你哪些文件冲突:
gitstatus通常会看到:
both modified: src/foo/bar.cpp步骤 2:打开冲突文件,看到冲突标记
冲突段长这样:
<<<<<<< HEAD 这是你本地修改的版本 ======= 这是远程(或你 rebase 到的分支)版本 >>>>>>> origin/main解释:
- HEAD 区块= 当前分支里的内容
- 下面区块= 你要 merge 或 rebase 的分支内容
步骤 3:手动选择要保留的内容
你有三种选择:
✔ 方案 1:保留我的(本地)版本
删掉远程区块:
我的代码✔ 方案 2:保留远程版本(目标分支,如 yellow)
目标分支的代码✔ 方案 3:合并两个版本(最常见)
手动编辑成你想要的最终样子,例如:
融合后正确的代码步骤 4:标记冲突解决
编辑完后:
gitadd<冲突文件>步骤 5:继续操作
如果你在用rebase
gitrebase --continue如果你在用merge
gitcommit(如果 Git 自动生成 merge commit message,也可以直接用)
步骤 6:如果你反悔想取消
停止 rebase
gitrebase --abort停止 merge
gitmerge --abort🧪三、冲突后必须做的检查
解决冲突后一定要:
- 重新编译 / 运行单元测试
- 确认逻辑正确
- 确认没有漏掉某些人的代码
这一步很重要,因为冲突解决错误比冲突本身更可怕。
🧰四、常见冲突处理技巧(进阶)
⭐ 技巧 1:可视化工具更简单
gitmergetool可调用:
- VSCode
- Meld
- KDiff3
- Beyond Compare
VSCode 用户可以直接:
code.然后在文件中点“Accept Incoming / Accept Current / Both”。
⭐ 技巧 2:你想要全保留 remote(例如 yellow 分支)
这是“保留对方版本”的快捷法:
gitcheckout --theirs.gitadd.gitrebase --continue或 merge 场景:
gitcheckout --theirs.gitadd.gitcommit⭐ 技巧 3:你想要全部保留自己的
gitcheckout --ours.gitadd.gitrebase --continue⭐ 技巧 4:查看冲突发生在谁的提交
gitlog --merge⭐ 技巧 5:修冲突之后检查差异
gitdiff--cached确保你 add 后的内容真的正确。
🛡️五、如何减少未来冲突?(最佳实践)
- 每次开发前先同步 yellow
gitcheckout yellowgitpullgitcheckout my-featuregitrebase yellow- 提交保持小而清晰
- 功能模块化修改,避免多人改同一文件
- 经常 push,减少你的变更积累