Gitlab 线上合并冲突的坑

背景

在 GitLab 上发起 feature → uat 的合并请求时,遇到冲突;你选择在 GitLab 网页端 Resolve conflicts ,结果解决冲突时,GitLab 把 uat 分支的代码合并进了 feature 分支,导致 feature 分支被污染。

现象

feature/my-feature 分支也有 uat 的代码,不符合预期

原因

  • 在线 Resolve 的逻辑
    • GitLab 并不是「只处理 MR 的合并结果」,而是直接在 源分支(feature) 上生成一个「冲突解决 commit」。
    • 换句话说,你在线解决冲突时,GitLab 会修改 feature 分支,而不是只在 MR 合并时处理。
  • 结果
    • feature 分支上会多出一个 commit,里面包含了 uat 分支的冲突解决内容。
    • 于是,feature 分支就「看起来像是被合并过 uat」,从而造成污染。

解决方案

本地手动操作:

bash 复制代码
# 1. 切换到feature分支 
git checkout feature/my-feature

# 2. 手动合并uat的最新代码(模拟GitLab的自动操作) 
git merge origin/uat 

# 3. 本地解决冲突 
# 4. 提交并推送feature/my-feature
git push origin feature/my-feature
# 5. 此时MR可直接合并(无需线上resolve)

如果已经污染了 feature 分支怎么办?

如果你不想 feature 带上 uat 的代码,有两种修复方式:

方案 A:回滚 feature 的污染 commit

perl 复制代码
git checkout feature/my-feature
git log   # 找到污染的 merge/resolve commit
git revert <commit-id>
git push origin feature/my-feature

方案 B:强制 reset 到污染前的版本

(如果团队允许,且 feature 上没重要改动)

perl 复制代码
git checkout feature/my-feature
git reset --hard <正确的commit-id>
git push origin feature/my-feature -f

建议

  • 不要用 GitLab 在线冲突解决,除非是临时性的 hotfix。
  • 团队流程最好规定:冲突必须在本地解决
  • 如果必须线上解决,可以新建临时分支(resolve 分支),解决冲突后再合并,避免污染 feature。
相关推荐
洗发水很好用6 小时前
uniapp纯css实现基础多选组件
前端·css·uni-app
踩着两条虫6 小时前
VTJ.PRO 在线应用开发平台的代码生成与模板系统
前端·低代码·ai编程
前端小崽子6 小时前
线上复制按钮失效?也许是这个原因
前端
张元清6 小时前
React 滚动效果:告别第三方库
前端·javascript·面试
有志7 小时前
Vue 学习总结(Java 后端工程师视角)
前端
踩着两条虫7 小时前
VTJ.PRO 在线应用开发平台的DSL生命周期
前端·低代码·ai编程
我是伪码农7 小时前
JS 复习
开发语言·前端·javascript
小碗细面7 小时前
Claude Code 很强,但为什么我越来越常打开 Codex App?
前端·chatgpt·ai编程
愿你如愿7 小时前
React Fiber 的主要目标是什么
前端·react.js
漂移的电子7 小时前
【echarts 细节】
前端·javascript·echarts