Git分支--合并分支(冲突合并)

简介: Git分支--合并分支(冲突合并)

在之前的正常合并中,我们都是通过将一个修改的子分支合并到我们没有修改的主分支里面,此时我们称这个过程为正常合并


假设此时我们将一个修改的子分支合并到我们修改了的主分支里面,那么此时便有可能发生冲突合并。


冲突合并产生的原因?


答:是两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。


那么此时我们来模拟下冲突合并发生的过程以及解决的办法:


1:首先我们在master分支下使用vim 文件名修改我们的hello.txt文件:修改如下所示


2.png


此时我们在倒数第二行加上我们的master test


修改完成后,此时我们还是按照之前介绍的步骤将我们修改后的hello.txt文件上传到master分支下的本地库,具题步骤不做详述,直接上截图:


2.png


2:完毕后此时我们切换到我们的hot-fix分支下去修改我们hot-fix分支下的hello.txt文件,过程如下所示:


2.png2.png


此时我们在倒数第一行加上我们的hot-fix test,完成对hot-fix分支下的hello.txt文件的修改,继续重复之前的操作,将修改后的hello.txt文件上传到hot-fix分支下的本地库


2.png


3:此时完成对hot-fix分支下的hello.txt文件的修改以及上传后,此时我们继续回到我们的master主分支下,进行我们分支的合并


2.png


输入git merge hot-fix后此时便会出现我们的分支冲突,原因是我们的master分支和我们的hot-fix分支此时都对我们的hello.txt文件进行了修改,导致当我们将hot-fix分支合并到我们master分支的时候,git不知道使用两个分支的哪一套针对hello.txt文件的修改方案,那么此时便会发生分支冲突。


如下图所示:会出现一个conflict英文字母以及当出现冲突后,我们括号内的字母不再是master,而是master|MERGING,表明一直在合并中,但是没有成功。


2.png


并且此时我们输入git status命令后我们会发现此时的hello.txt文件是没有合并成功的:both modified hello.txt表示两个分支都修改了hello.txt文件,此时git不敢自动合并分支了,只能我们人为手动合并分支代码了。


2.png


4:为了解决我们的冲突合并的问题,此时就需要我们去人为决定新代码的内容:


第一步:此时首先使用vim hello.txt命令先手动打开我们的文件,此时我们会发现跟之前有一些不同之处:


2.png


此时我们会发现三个特殊的符号:


<<<<<<>>>>>>中间为要合并进master分支的代码


第二步:为了解决我么分支冲突的问题,此时需要人工修改我们的代码,之前我们修改了hot-fix分支下的hello.txt文件中的最后一行,修改了master分支下的hello.txt文件的倒数第二行,此时我们要将hot-fix分支合并到master分支下,那么我们的hello.txt文件此时倒数两行都应该要被修改,那么此时我们就按照我们预期的效果来进行人工修改,删除特殊符号,决定要使用的内容即可:


2.png


修改完成后,输入:wq保存后,此时我们仍需要将我们人为修改的hello.txt文件上传到我们的暂存区以及我们的本地库中


第三步:将我们人工修改后的hello.txt文件上传到暂存区:如下图所示:我们会发现此时我们的冲突合并还没有解决,因为此时括号内还是有MERGING


2.png


第四步:此时继续将修改后的hello.txt文件提交到本地库中去,但是此处需要注意的是之前我们将文件提交到本地库的命令为git commit -m "日志信息" 文件名,


但是此处为了解决我们分支的合并冲突,此时不能加文件名,这样才能解决我们的冲突合并:如下图所示:


1:假设此时我们带上了文件名的话:会报一个致命的错误:


2.png


2:假设此时不带上我们的文件名的话,此时便解决了我们的冲突合并,并且此时我们括号内的master|MERGING变成了master,说明此时成功了。


2.png


第五步:使用vim hello.txt命令查看我们的hello.txt文件内容:发现此时分支代码合并成功,是我们所预期的效果。


2.png


注意:此时我们合并的代码只是覆盖了原本我们主分支master下的hello.txt文件内的内容,但是我们子分支hot-fix分支下的内容并没有发生改变,如下图所示,我们可以看到我们的子分支hot-fix中的hello.txt文件内容并没有发生改变:

2.png

目录
打赏
0
0
1
0
11
分享
相关文章
图解Git——分支的新建与合并《Pro Git》
在Git开发中,新建与合并分支是常见的操作。以实际开发为例:为实现新需求创建分支`iss53`进行开发;遇紧急Bug时,切换至线上分支创建`hotfix`修复并合并回线上分支,再切换回`iss53`继续工作。完成`iss53`后,切换到`master`合并。若出现冲突,使用`git status`查看,手动编辑解决冲突后标记为已解决并提交。图形化工具如`git mergetool`也可辅助解决冲突。
72 9
图解Git——分支简介《Pro Git》
Git 分支是其核心特性之一,允许开发者从主开发线分离工作,避免干扰主线。传统版本控制系统创建分支效率低,而Git的分支创建和切换非常轻量高效。
175 9
vscode+git解决远程分支合并冲突
通过这些详细步骤,您可以掌握如何使用VSCode和Git高效地解决远程分支合并冲突,提高开发效率和代码质量。希望这些内容对您的学习和工作有所帮助。
525 86
图解Git——分支开发工作流《Pro Git》
分支开发工作流利用Git的分支功能,支持灵活的项目管理。长期分支如`master`和`develop`分别保存稳定和开发中的代码;短期主题分支用于开发单一特性或修复问题,完成后合并到主分支。此模式确保代码稳定性,支持并行开发、便于审查和灵活调整。建议维护明确的长期分支,保持主题分支短小精悍,并定期清理无用分支。配置上可保护关键分支,遵循命名规范。
138 7
图解Git——远程分支《Pro Git》
远程分支是 Git 中用于管理分布式协作的关键概念。远程引用指向远程仓库中的分支和标签,常用 `git ls-remote` 或 `git remote show` 查看。日常开发中,通常使用远程跟踪分支(如 `origin/main`)与远程分支交互,简化远程仓库状态的管理和使用。远程跟踪分支记录远程分支的状态,但本身只读。
54 6
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
210 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
本文通过具体操作和截图,详细讲解了如何在Git中解决分支冲突问题,包括如何识别冲突、手动解决冲突代码、提交合并后的代码,以及推送到远程分支。
1130 3
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
Git创建分支以及合并分支
在Git中,创建分支使用`git branch [branch_name]`,切换分支使用`git checkout [branch_name]`。修改文件后,通过`git add [file]`添加到暂存区,然后`git commit`提交到本地仓库。如果是新建分支的第一次推送,使用`git push origin [branch_name]`推送到远程仓库,之后可以简化为`git push`。合并分支时,使用`git merge [branch_name]`将指定分支的更改合并到当前分支。
185 2
Git创建分支以及合并分支
Git分支使用总结
Git分支使用总结
88 1
掌握 Git 分支策略:提升你的版本控制技能
在现代软件开发中,版本控制至关重要,Git 作为最流行的分布式版本控制系统,其分支管理策略对于高效协作和代码维护尤为重要。本文介绍了几种常用的 Git 分支策略,包括主线开发模型、功能分支模型、Gitflow 工作流和 Forking 工作流,并探讨了如何根据项目需求选择合适的分支模型。通过保持 `master` 分支稳定、及时合并清理分支、使用命名规范、利用 Pull Request 进行代码审查及自动化测试等最佳实践,可以显著提升团队协作效率和软件质量。掌握这些策略将帮助开发者更好地管理代码库,加快开发流程。

相关实验场景

更多
下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等