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。
相关推荐
ℋᙚᵐⁱᒻᵉ鲸落1 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙2 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
前端snow3 小时前
ai agent --- 实现 openclaw 定时间效果
前端
码云之上4 小时前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化
星栈4 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·agent·weui
研☆香4 小时前
简单的图片上传 删除 预览
前端
ITresearchGuest4 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·人工智能·信息可视化
慧一居士6 小时前
Vite项目中使用Less步骤,详细使用示例
前端·css
花间相见6 小时前
【LangChain组件03】—— LangChain Agents 执行与状态:工作流程与状态管理实战
java·前端·langchain
kyriewen6 小时前
面试官让我用 AI 重构一个 8 年陈的 React 组件——他说他不看代码,只看我会不会拆
前端·javascript·面试