当前位置: 首页 > article >正文

git 如何解决分支合并冲突(VS code可视化解决+gitLab网页解决)

1、定义:两个分支修改了同一文件的同一行代码,无法自动决定如何合并代码,需要人工干预的情况。(假设A提交了文件a,此时B在未拉取代码的情况下,直接提交是会报错的,此时需要拉取之后再提交才会成功)

2、原始冲突解决演示:

背景:假设现在有主分支:develop,开发分支A,开发分支B,二者都是基于develop分支创建的,此时A 先向develop分支合并了一个文件index.js。然后B紧接着向develop分支上合并了自己修改的index.js文件,以为A和B都在index.js中写了不同的代码,此时git不知道保留哪段代码。此时就会报代码冲突。怎么解决呢?这里介绍的是在gitLab网页上做合并分支操作的情况。

首先如果出现代码冲突时,gitLab会给出提示提醒你合并冲突了,此时针对的代码冲突可以在gitLab上点击在线解决, 

如果不想在线解决冲突,也可在VS code中解决。首先使用git remote update -p  # 获取所有远程最新数据,并清理过时的远程分支 。其次git checkout 自己的开发分支名   # 切换到你的分支(假设当前不在你的分支)。然后git merge 主分支名   # 将远程 develop 分支合并到你的分支。此时在左侧的源代码管理中会列举冲突的文件(右侧会提示感叹号),点击进去会显示具体的冲突代码,此时可以依据自己的需求解决冲突之后,然后重新提交推送合并即可。

3、上面说到的原始合并冲突会有个情况,即开发分支B收到了develop的污染。下面说下进阶版。

背景:假设现在有主分支 :develop,开发分支A,开发分支B,初版发布分支1.1.0,更新版发布分支1.1.1,本次发布分支1.1.2。此时A与B分支都是基于1.1.0分支创建的,develop是调试用的分支。发布时会将各自的开发分支合并至发布分支上,但此时有个复杂情况就是分支A是第二次迭代的时候合并至1.1.1上了,此时分支B是第三次迭代的开发分支,是需要合并到1.1.2上的,此时有人就会问了,为什么B分支不在1.1.1的基础上创建呢?因为第二次迭代与第三次迭代是同步开发的。此时我再想通过merge develop到B分支上时就会出现污染。因为develop分支上可能存在某些代码是本次发布不需要发布出去的代码。此时,比如有个需求,需要在开发分支B上修改1.1.1分支上的某个文件index.js,此时应该怎么做呢?

解决方案:使用 gitcheckout+临时分支(推荐)

第一步:在本地模拟合并冲突

# 1. 确保当前在B分支且工作区干净
git checkout B
git status  # 确认没有未提交的修改

# 2. 基于当前B创建临时分支(用于安全测试合并)
git checkout -b 临时分支名称

# 3. 尝试将 develop 合并到临时分支(触发冲突):(这里也可以merge1.1.1分支,只是develop是调试分支,所有的开发分支都需要合并至develop分支验证通过才会合并至1.1.2上),这里解决的是B分支与develop分支合并冲突。

git merge develop
#这里会报冲突,但不会影响原B分支

第二步:在 VSCode 中查看冲突

VSCode 会自动检测冲突:
1.打开 源代码管理面板(左侧导航栏的 Git 图标)。
2.冲突文件会显示为 红色感叹号 !,文件名旁标注 CONELICT 。
3.点击冲突文件,会看到冲突标记(<<<<<<<、==----=、>>>>>>>)。

手动查看冲突文件:git status

第三步:清理临时分支(不保存合并结果),此时B分支完全未被修改,且你已知道冲突文件。

git checkout B #切换回原分支

git branch -D 临时分支名 #强制删除临时分支

第四步:此时可将刚刚在临时分支上解决好的冲突代码复制一份替换至B分支上,此时就可以精确的解决index.js文件的代码冲突,而不会造成污染。此时再次提交推送合并即可。

http://www.lryc.cn/news/2396212.html

相关文章:

  • 【CF】Day72——Codeforces Round 890 (Div. 2) CDE1 (二分答案 | 交互 + 分治 | ⭐树上背包)
  • 单片机寄存器的四种主要类型!
  • 智能嗅探AJAX触发:机器学习在动态渲染中的创新应用
  • 【计算机网络】Linux下简单的UDP服务器(超详细)
  • Java并发编程实战 Day 3:volatile关键字与内存可见性
  • 华为OD机试真题——报文回路(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • K8s工作流程与YAML实用指南
  • 功能丰富的PDF处理免费软件推荐
  • Java补充(Java8新特性)(和IO都很重要)
  • pycharm debug的时候无法debug到指定的位置就停住不动了
  • 分布式流处理与消息传递——Kafka ISR(In-Sync Replicas)算法深度解析
  • 极大似然估计例题——正态分布的极大似然估计
  • Pull Request Integration 拉取请求集成
  • OS10.【Linux】yum命令
  • 头歌数据库课程实验(角色管理)
  • 【android bluetooth 协议分析 03】【蓝牙扫描详解 1】【扫描关键函数 btif_dm_search_devices_evt 分析】
  • SpringBoot使用ThreadLocal保存登录用户信息
  • 多模态大语言模型arxiv论文略读(102)
  • Ubuntu系统如何部署Crawlab爬虫管理平台(通过docker部署)
  • python常用库-pandas、Hugging Face的datasets库(大模型之JSONL(JSON Lines))
  • 高端装备制造企业如何选择适配的项目管理系统提升项目执行效率?附选型案例
  • 【Dv3Admin】工具权限配置文件解析
  • AI炼丹日志-22 - MCP 自动操作 Figma+Cursor 自动设计原型
  • Python爬虫:AutoScraper 库详细使用大全(一个智能、自动、轻量级的网络爬虫)
  • 2025.6.1总结
  • [嵌入式实验]实验四:串口打印电压及温度
  • LVS+Keepalived 高可用
  • Linux正则三剑客篇
  • HTML5 视频播放器:从基础到进阶的实现指南
  • 鸿蒙HarmonyOS (React Native)的实战教程