一、是什么
一般情况下,出现冲突的场景有如下:
多个分支代码合并到一个分支时
多个分支向同一个远端分支推送
具体情况就是,多个分支修改了同一个文件(任何地方)或者多个分支修改了同一个文件的名称
如果两个分支中分别修改了不同文件中的部分,是不会产生冲突,直接合并即可
应用在命令中,就是push
、pull
、stash
、rebase
等命令下都有可能产生冲突情况,从本质上来讲,都是merge
和patch
(应用补丁)时产生冲突
二、分析
在本地主分值master
创建一个a.txt
文件,文件起始位置写上master commit
,如下:
![](https://i-blog.csdnimg.cn/blog_migrate/b8a5068afdac12acb2065ea31dba698b.png)
然后提交到仓库:
git add a.txt
git commit -m 'master first commit'
创建一个新的分支featurel1
分支,并进行切换,如下:
git checkout -b featurel1
然后修改a.txt
文件首行文字为 featurel commit
,然后添加到暂存区,并开始进行提交到仓库:
git add a.txt
git commit -m 'featurel first change'
然后通过git checkout master
切换到主分支,通过git merge
进行合并,发现不会冲突
此时a.txt
文件的内容变成featurel commit
,没有出现冲突情况,这是因为git
在内部发生了快速合并
❝如果当前分支的每一个提交(commit)都已经存在另一个分支里了,git 就会执行一个“快速向前”(fast forward)操作
git 不创建任何新的提交(commit),只是将当前分支指向合并进来的分支
❞
如果此时切换到featurel
分支,将文件的内容修改成featrue second commit
,然后提交到本地仓库
然后切换到主分支,如果此时在a.txt
文件再次修改,修改成mastet second commit
,然后再次提交到本地仓库
此时,master
分支和feature1
分支各自都分别有新的提交,变成了下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/c89941ef66220f2e57cf4c8fce9fa361.png)
这种情况下,无法执行快速合并,只能试图把各自的修改合并起来,但这种合并就可能会有冲突
现在通过git merge featurel
进行分支合并,如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/55e7748f4c3a790f8b3edf755a6135f5.png)
从冲突信息可以看到,a.txt
发生冲突,必须手动解决冲突之后再提交
而git status
同样可以告知我们冲突的文件:
![](https://i-blog.csdnimg.cn/blog_migrate/0caa0348e7ad10acb6c49db1de4bffae.png)
打开a.txt
文件,可以看到如下内容:
![](https://i-blog.csdnimg.cn/blog_migrate/74660b8a9e17c088e4b10025e81d8878.png)
git
用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容:
<<<<<<< 和 ======= 之间的区域就是当前更改的内容
======= 和 >>>>>>> 之间的区域就是传入进来更改的内容
现在要做的事情就是将冲突的内容进行更改,对每个文件使用 git add
命令来将其标记为冲突已解决。一旦暂存这些原本有冲突的文件,Git
就会将它们标记为冲突已解决然后再提交:
git add a.txt
git commit -m "conflict fixed"
此时master
分支和feature1
分支变成了下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/b965ca9bb8113a7dc01ab48dc330480c.png)
使用git log
命令可以看到合并的信息:
![](https://i-blog.csdnimg.cn/blog_migrate/49ba12b516a0f2185e7425991137bace.png)
三、总结
当Git
无法自动合并分支时,就必须首先解决冲突,解决冲突后,再提交,合并完成
解决冲突就是把Git
合并失败的文件手动编辑为我们期望的内容,再提交
参考文献
https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344
https://vue3js.cn/interview
--The End--
系列正在更新:9/10
点击下方卡片解锁更多
创作不易,星标、点赞、在看 三连支持