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

分支管理(二):解决合并冲突,处理“代码打架”

1. 问题场景你已经学会了创建分支和合并分支。在上一篇文章里合并过程顺滑得像切黄油——Git 自动完成了所有工作。但真实世界里你和一个同事可能同时修改了同一个文件的同一处代码。当你试图把两个分支合并在一起时Git 会停下来告诉你“我搞不定这两边都改了同一个地方你来决定留哪个。”这种现象就叫合并冲突。它不是什么系统故障而是 Git 的一种保护机制防止你的代码被悄无声息地覆盖。理解冲突的产生原因并学会解决它是掌握 Git 分支协作的关键一步。2. 核心概念合并冲突发生在两个分支修改了同一个文件的同一区域时。这里的“同一区域”可以理解为相邻的几行代码。如果两个人分别修改了不同文件或者同一文件的不同位置Git 通常能自动合并不会引发冲突。但一旦双方的修改在空间上重叠Git 就无法自动判断谁对谁错只能把这个决策权交给你。冲突并不可怕也不意味着你做错了什么。它只是一个信号告诉你“这里有两个版本需要你人工确认最终版本。” 解决冲突的过程本质上是人工审查、决定取舍、然后告诉 Git“我已经搞定了”。3. 核心命令除了上一篇文章已经学过的git merge这里引入一个重要的参数gitmerge --no-ff-mmessagebranch_name--no-ff代表no fast forward即禁用快进模式。即使 Git 本可以快进合并也会强制生成一个新的合并提交。这样做的好处是在项目历史记录里能清晰地看到“这里发生过一次分支合并”保留了分支的存在痕迹有利于后续追溯。这在团队协作和 Git Flow 等模型中是非常常用的做法。4. 实战演示下面我们手动制造一个冲突然后一步步解决它。你可以在myproject仓库里操作或者新建一个干净仓库。4.1 准备战场假设当前在master分支ReadMe文件已经有一些内容。现在创建并切换到dev1分支$gitcheckout-bdev1 Switched to a new branchdev1在dev1分支上修改ReadMe中的一行将某处内容从aaa改为bbb。如果文件里没有aaa可以先添加一行含aaa的内容。为了演示清楚我们这样操作# 假设 ReadMe 目前内容为# hello git# hello git again# version: aaa$echoversion: aaaReadMe# 确保文件内容统一便于冲突$gitaddReadMe $gitcommit-mset version aaa on dev1然后切回master分支$gitcheckout master在master分支上对同一个文件的同一位置做不同修改。将aaa改为ccc$echoversion: cccReadMe# 这里直接覆写了同一行$gitaddReadMe $gitcommit-mset version ccc on master现在两个分支对同一文件的同一行有了不同的最终状态。4.2 触发冲突在master分支上尝试合并dev1$gitmerge dev1 Auto-merging ReadMe CONFLICT(content): Merge conflictinReadMe Automatic merge failed;fix conflicts andthencommit the result.Git 直接告诉你合并失败并指出冲突文件是ReadMe。用git status查看详情$gitstatus On branch master You have unmerged paths.(fix conflicts and rungit commit)(usegit merge --abortto abort the merge)Unmerged paths:(usegit add file...to mark resolution)both modified: ReadMe no changes added to commit(usegit addand/orgit commit -a)both modified表明ReadMe被两边都改了。4.3 解读冲突标记打开ReadMe文件你会看到类似这样的内容 HEAD version: ccc version: bbb dev1这就是 Git 的冲突标记 HEAD到之间的部分是当前分支这里是master的内容。到 dev1之间的部分是被合并分支这里是dev1的内容。你需要做的就是决定保留哪一版或者手动改写成一个新的、综合了两边需求的版本然后删除这些标记符号。4.4 解决冲突假设经过判断最终决定采用dev1的版本bbb。那么就把文件修改为version: bbb删除掉所有、、这些行只留下你要的内容。如果你想让最终版本是ccc就留version: ccc。如果想结合两者比如改成version: bbb and ccc也完全可以。重点是删除 Git 添加的三行标记。4.5 完成合并文件改好后保存退出。接下来把解决完冲突的文件标记为已解决并完成这次合并提交$gitaddReadMe $gitcommit-mmerge dev1: resolve conflict, keep bbb此时 Git 会生成一个合并提交两个分支的历史重新交汇。可以用git log --graph --oneline查看分支图谱确认合并成功。最后如果不再需要dev1分支可以删除$gitbranch-ddev14.6 使用 --no-ff 保留合并记录前面的操作并没有使用--no-ff默认可能会采用快进模式。为了在历史中保留明确的分支合并记录可以在合并时加上该参数$gitmerge --no-ff-mmerge dev1 with --no-ffdev1这样即使可以快进也会产生一个新的合并提交让你的提交历史图更清晰。5. 注意事项在开始合并前最好确保工作区是干净的git status无未提交改动避免冲突解决过程中掺杂其他问题。如果你暂时不想解决冲突或者觉得需要回退重新来可以执行git merge --abort它会取消本次合并回到合并前的状态所有冲突标记都会被清除。对于大型项目冲突可能涉及多个文件。git status会列出所有有冲突的文件你需要逐个打开、解决、标记。在多人协作中如果你频繁遇到冲突往往是沟通不足或者任务拆分粒度过粗的信号。频繁拉取最新代码并保持小步提交可以显著减少冲突的发生。6. 要点总结合并冲突产生于两个分支修改了同一文件的同一区域是 Git 的保护机制而非错误。冲突文件中Git 用、、标记出双方差异你需要手动决策最终内容并删除标记。解决冲突的流程编辑文件 → 删除标记 →git add→git commit。git merge --no-ff可以强制生成合并提交保留分支历史痕迹。不要害怕冲突掌握解决流程后它只是日常协作中的一个常规操作。7. 练习题创建一个新仓库或沿用myproject从master分支创建两个分支分别对同一个文件同一行做出不同修改然后模拟合并冲突。执行合并观察 Git 输出的冲突提示并用git status查看状态。打开冲突文件识别、、标记的区域手动编辑解决冲突保留你认为合理的版本。git add冲突文件然后完成合并提交。使用git log --graph --oneline查看分支合并历史。练习git merge --abort再次制造一个冲突但在解决之前执行git merge --abort确认工作区恢复到了合并前状态。思考题如果冲突文件不止一个你会如何高效地定位并解决尝试制造多文件冲突场景并练习。

相关文章:

分支管理(二):解决合并冲突,处理“代码打架”

1. 问题场景 你已经学会了创建分支和合并分支。在上一篇文章里,合并过程顺滑得像切黄油——Git 自动完成了所有工作。但真实世界里,你和一个同事可能同时修改了同一个文件的同一处代码。当你试图把两个分支合并在一起时,Git 会停下来&#xf…...

2026最权威的十大AI学术平台实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于撰写学术论文之际,标题的构思常常要耗费诸多精力,它得精准确切赅括…...

6.3 节深度拆解:Hermes Agent 多 Agent 协同执行链路的 4 层设计逻辑

1. 多 Agent 协同不是“堆人”,而是建流水线:Hermes 的 4 层链路设计,本质是工程化任务分解 我第一次把三个 Hermes Agent 拉进同一个 workflow 时,以为只要给它们起好名字、连上模型、丢个需求进去,就能自动跑出结果。结果跑了三轮:第一轮,Code Agent 写完函数,Test …...

八大排序算法 - 冒泡排序

一、算法简介冒泡排序是最基础的交换类排序,思路简单易懂。原理是相邻元素两两比较,逆序则交换,大数逐步向后沉,小数向前冒,如同气泡上浮。时间复杂度:最优(O(n)) 最坏 / 平均(O(n^2))空间复杂度&#xff1…...

EC35编码器驱动踩坑实录:从波形分析到稳定读取,我的GD32调试笔记

EC35编码器驱动踩坑实录:从波形分析到稳定读取的GD32调试笔记 1. 问题初现:那些让人抓狂的"玄学"现象 第一次把EC35编码器接到GD32F303开发板上时,我天真地以为这不过是个简单的GPIO中断应用。按照常规思路配置了三个引脚的中断&am…...

告别论文焦虑:百考通AI,让你的本科毕业论文像“闯关升级”一样简单

又到了一年毕业季,对于广大本科生而言,那座名为“毕业论文”的大山,是否又一次压得你喘不过气?面对空白的Word文档,你是否感到无从下手?导师的催促、复杂的格式、浩如烟海的文献、以及令人心慌的查重……这…...

研究助理/项目经理/内容编辑:Hermes Agent 3 类人格模板的 SOUL.md 配置要点

1. 三类人格不是“角色扮演”,而是上下文锚点的工程化切片 大多数人第一次看到 Hermes Agent 的 SOUL.md 配置时,会下意识把它当成一个“AI人设说明书”:研究助理要严谨、项目经理要干练、内容编辑要文雅。这种理解在小规模单次交互中勉强能用,但一旦进入真实研发流程——…...

STM32 HAL库实战:用CD74HC4067扩展模拟输入通道,附完整工程代码

STM32 HAL库实战:用CD74HC4067扩展模拟输入通道,附完整工程代码 在嵌入式开发中,模拟信号采集是常见需求,但MCU内置ADC通道数量往往有限。当面对多路传感器信号采集时,如何经济高效地扩展输入通道成为开发者必须解决的…...

从芯片到系统:手把手拆解汽车MCU里的安全硬件(SHE/HSE)与独立HSM如何协作

汽车MCU安全架构实战:SHE/HSE与独立HSM的协同设计指南 当一辆现代汽车启动时,从车门解锁到发动机控制,超过1亿行代码在数百个微控制器(MCU)上同时运行。这些代码中包含着价值连城的数字资产——车主的生物特征数据、自…...

别再只把JTAG当烧录器了!一文搞懂它的边界扫描(Boundary-Scan)到底怎么玩

解锁JTAG边界扫描的隐藏技能:从烧录到硬件诊断的全能玩法 在嵌入式开发领域,JTAG接口常被简化为"烧录工具"的代名词——这种认知偏差让我们错失了它最强大的能力。想象一下:当PCB上某个关键信号无法测量时,当BGA封装的芯…...

用Python和pywifi写个WiFi密码测试工具(附完整GUI源码)

用Python构建WiFi安全测试工具:从原理到GUI实现 在数字化时代,WiFi安全已成为个人和企业网络安全的第一道防线。作为Python开发者,我们如何利用技术手段来验证自身网络的安全性?本文将带你从零开始构建一个基于pywifi库的WiFi连接…...

对比直接购买与通过Taotoken聚合使用大模型API的体验差异

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接购买与通过Taotoken聚合使用大模型API的体验差异 在开发和集成大模型能力的过程中,开发者或团队通常面临两种主…...

别再手动调寄存器了!用Simulink给F28335 DSP配置ePWM,20kHz互补带死区输出一次搞定

告别寄存器调试:用Simulink图形化配置F28335 DSP的ePWM模块 在电机控制和电源逆变器开发中,PWM信号生成是核心环节。传统开发方式需要工程师反复查阅数百页的数据手册,手动计算并配置数十个寄存器参数,一个简单的死区时间设置就可…...

用Unity和PICO SDK 2.3.0+打造你的第一个VR手势交互Demo:手势抓取与触发事件详解

用Unity和PICO SDK 2.3.0打造你的第一个VR手势交互Demo:手势抓取与触发事件详解 VR手势交互正在重塑人机交互的边界。想象一下,当你戴上PICO头显,无需任何控制器,仅凭双手就能在虚拟世界中抓取物体、投掷飞镖甚至弹奏钢琴——这种…...

【软考高级架构】论文范文21——论Kappa架构在大数据平台中的设计与应用

论Kappa架构在大数据平台中的设计与应用 摘要 随着大数据技术的快速发展,传统Lambda架构因需要同时维护批处理和流处理两套系统,导致开发复杂度高、数据口径不一致、运维成本大等问题日益突出。Kappa架构作为一种精简的统一处理范式,通过将数据全部视为流、以消息队列为核…...

终极QR二维码修复工具:QRazyBox完整指南与高效恢复技巧

终极QR二维码修复工具:QRazyBox完整指南与高效恢复技巧 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 还在为损坏的二维码无法扫描而烦恼吗?QRazyBox是一款专业的免费…...

10大好用WMS系统盘点!2026年企业WMS系统选型实战指南

在2026年企业数字化转型的浪潮中,WMS系统(仓储管理系统)已经成为提升供应链效率的核心工具。面对市面上琳琅满目的WMS系统,企业如何进行精准的WMS系统选型,成为了管理者面临的一大难题。为了帮助大家避坑,本…...

Multi-Agent产品创新:从单一场景到跨域协同的演进

Multi-Agent产品创新:从单一场景到跨域协同的演进 关键词:多智能体系统、产品创新、跨域协同、单一场景智能、Agent协作框架、LLM驱动Agent、分布式智能 摘要:大语言模型的爆发式发展,让智能Agent从实验室走向了大众消费级产品。本文从生活场景的真实痛点切入,逐层拆解Mul…...

从“马变斑马”到“卫星图转地图”:用CycleGAN/pix2pix玩转自定义数据集(附制作教程)

从卫星影像到艺术创作:CycleGAN与pix2pix自定义数据集实战指南 当第一次看到卫星遥感图像自动转换成街道地图时,那种技术带来的震撼感至今难忘。这不仅仅是简单的滤镜效果,而是深度学习模型真正理解了两种图像模态之间的深层关联。作为计算机…...

转向现代C++——优先选用限定作用域的枚举型别,而非不限作用域的枚举型别

文章目录优先选用限定作用域的枚举型别,而非不限作用域的枚举型别名字空间污染强类型安全与隐式转换前置声明特例:什么时候不限作用域的 enum 更好?现代 C 的替代方案(C17 结构化绑定)优先选用限定作用域的枚举型别&am…...

如何快速获取免费的EB Garamond 12字体:古典优雅的终极排版解决方案

如何快速获取免费的EB Garamond 12字体:古典优雅的终极排版解决方案 【免费下载链接】EBGaramond12 项目地址: https://gitcode.com/gh_mirrors/eb/EBGaramond12 EB Garamond 12是一款完全免费的开源字体,完美复刻了16世纪Claude Garamont的经典…...

数据中心电力模块的发展趋势对数据中心建设的影响

在人工智能与高性能计算浪潮的推动下,数据中心正加速向智算中心演进。作为算力基石的供配电系统,其形态与功能正经历深刻重塑。电力模块作为预制模块化数据中心的核心组成部分,其发展演进正从建设模式、技术架构、运营管理和生态构建等多个维…...

如何快速掌握LRC Maker:新手制作精准同步歌词的完整指南

如何快速掌握LRC Maker:新手制作精准同步歌词的完整指南 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 在数字音乐时代,你是否曾想为自己喜…...

3个高效方法解决抖音素材管理难题:从零散文件到有序素材库

3个高效方法解决抖音素材管理难题:从零散文件到有序素材库 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…...

One API 部署教程(上):本地部署完整指南

前言 One API 是一个开源的 AI API 聚合管理平台,可以让你用一个统一的接口调用多个 AI 平台的 API(如 OpenAI、DeepSeek、通义千问等)。 为了让大家能全面了解 One API,我决定写一个系列教程: One API 部署教程(上):本地部署完整指南(本文) One API 部署教程(中)…...

如何用Path of Building物品制作系统打造终极装备:5个简单步骤

如何用Path of Building物品制作系统打造终极装备:5个简单步骤 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/gh_mirrors/pat/PathOfBuilding 你是否曾为《流放之路》中装备制作耗费大量通货却得…...

【NotebookLM因子分析实战指南】:3步解锁AI驱动的维度降维与业务洞察力

更多请点击: https://intelliparadigm.com 第一章:NotebookLM因子分析辅助的底层逻辑与价值定位 NotebookLM 是 Google 推出的面向研究者的 AI 助手,其核心能力并非泛化式问答,而是基于用户上传文档进行“可信引用驱动”的深度推…...

体验Taotoken分钟级接入与标准OpenAI协议的无缝切换

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 体验Taotoken分钟级接入与标准OpenAI协议的无缝切换 对于已经熟悉OpenAI API的开发者而言,尝试新的模型服务通常意味着…...

地平线旭日X3派边缘AI开发板深度体验:从开箱到模型部署实战

1. 项目概述:当“地平线”升起时,我们看到了什么?最近几年,如果你关注边缘计算、机器人或者智能驾驶,那么“地平线”这个名字你一定不陌生。它早已不是那个遥远的天际线,而是成为了国内AI芯片领域一个响当当…...

HS2-HF_Patch:一键解决《Honey Select 2》三大核心问题的终极增强补丁

HS2-HF_Patch:一键解决《Honey Select 2》三大核心问题的终极增强补丁 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 厌倦了《Honey Select 2》原版…...