问题记录:
问题概述:
1. 图中有两个分支,master,dev分支, 如果master分支和dev分支合并, 会不会产生冲突? 如何才能避免冲突呢? 避免冲突的规则是什么呢??
2. 图中master分支有4个commit值, dev分支有2个commit值.
正文
本文的知识点涉及到以下两篇文章的内容:
https://blog.csdn.net/qq_44160357/article/details/103548128
https://blog.csdn.net/qq_44160357/article/details/103568122
解析一:
1. 在master分支和dev分支上的修改都是根据base文件的内容为基础进行修改.
2. 同时首先git的区分文件变化的最细粒度是line行, 不是单词更不是字母.
1. master分支和deV分支来进行合并, master指向 commit值为21cecd,dev指向 commit值为56c17e。如果要
进行合并,此时是不会产生冲突的,为什么呢?在 maste分支上有4个 commit值,dev分支上有2个 commit值,
两个分支进行合并,是把21ced的内容和56c17e的内容进行合并,在 master分支和dev分支上的修改都是根据
base文件的内容为基础进行修改.21ced的内容是在4db7a内容上添加了 master分支2,而4dcb7a是在
3f0c730的内容上添加了 master分支1,3f0c730是在fb2d924上添加了 maste分支,我们换一种角度来观察文件
内容的变化,我们可以想成21cecd的内容是在fb2d924的基础上添加了 master分支, master分支1, master分支
相当于在fb2d924的基础上添加了 maste分支, maste分支1, master分支2,可以看成 master分支上只有两
个ommi值,fb2d924->21cecd。把中间的3f0c730和4dcb7a给忽略掉.而dev分支的56c17e的内容是在
fb2d924的基础上添加了dev分支。
图中的commit值的合并可以简单理解成如下图:
在master分支和dev分支上的修改都是根据base文件的内容为基础进行修改.。master分支上的21cecd的内容相当于是在fb2d924的基础上添加了 master分支, master分支1, master分支2。 而dev分支上的56c172的内容相当于是在fb2d954上添加dev分支. 在21cecd上修改第4行和第5行修改, 同时在第5行下面添加一行, 那么此时不能修改第3行内容. 也不能在3.5上添加一行或者多行内容. 如何避免冲突呢? 我们可以在2.5上添加一行或者多行新内容. 也可以在第1行或者第2行上修改该行的内容. 也可以在第1行上面添加一行或者多行新内容. 此时dev分支上在第2行修改并不会产生冲突. 此时master分支和dev分支合并不会产生冲突.
该文章需要前两篇文章的基础:
https://blog.csdn.net/qq_44160357/article/details/103548128
https://blog.csdn.net/qq_44160357/article/details/103568122
记录:
1. 合并的时候要根据共同祖先, 如果是同一个祖先, 则可能不会冲突, 如果不是同一个祖先, 很有可能冲突.
2. 如果是同一个祖先, 本文中的fb2d924是master分支和dev分支的共同祖先, 此时都是基于base文件来进行修改.
3. 如果要两个分支上有多个commit值, 我们可以把多个commit值抽象成一个commit值, 此时master分支由以前的多个commit值抽象成两个commit值, 一个是共同祖先,一个是抽象的commit值,比如图中的master分支抽象成了两个commit值, fb2d924和21cecd。 dev分支抽象成了fb2d924和56c17e。 其中fb2d924是两个分支的共同祖先.
4. 当两个分支都抽象后, 就可以根据冲突的规则来判断是否冲突. 如果冲突了就是git add . 和git commit -m "冲突已解决".
5. 两个分支有多个commit值时,根据base文件(base文件就是共同祖先的文件)的内容. 同时对两个分支进行抽象,使其变成一个commit值, 然后根据base文件(base文件就是共同祖先的文件)的内容和根据冲突规则来进行对两个分支的内容进行修改. 使其避免冲突的发生!!!
来源:CSDN
作者:From_Dusk_Till_Dawn
链接:https://blog.csdn.net/qq_44160357/article/details/103599624