00:00
那这个呃,正常合并之后,我再给大家演示一种,就是那个在企业里边比较常见的这个代码冲突这个问题,咱们还要涉及到一个冲突合并啊,那怎么什么时候首先大家明白一个问题啊,什么时候我会遇到这个冲突呢,产生冲突呢,就是一句话啊,什么一句话。你这个两个分支对于同一个文件啊,同一个位置,它都有做了两套完全不同的修改,那只要是这个get,他无法替我们决定使用哪一个的时候。你这个时候他会就会给你报一个代码冲突,所以说需要你人为决定你这个代码谁去谁留啊,这种时候就会产生这个代码冲突了。那就比如说哎,我现在给大家演示一下这个问题,好吧,那怎么演示呢?首先啊,我们这么玩,现在因为我们我们是刚才合并好的,所以说咱们这个master分支跟这个什么呀,跟这个fix分支hot fix分支它们两个是一样的,那这个时候怎么玩啊,首先啊,我先修改一下master分支看好了,同学们我先在这个master分支上,哎,我修改一下这个hello的TXT,那我干嘛呀,那这个时候我在我这个倒数第二行看好了啊,我在我这个代码的倒数第二行加了一个东西,就比如说这个master。
01:24
这个test可以吧,就说明我这个master修改了一下东西啊,修改了,那然后呢,我这个WQ保存,那你光修改不行啊,你要干嘛呀,你给它添加暂存区,提交本地库,那我就添加一下呗,Get at hello.txt,然后呢,再给他来一个叫get。Commit修MIT是吧,Get commit,然后那个叫杠M,那我们写一个版本叫什么呀?就叫这个master test吧,我就叫master test可以吧,就咱们这个master做了一次修改,做了一次尝试啊,然后呢,我给他加加一个叫hello器,诶那就说明这个时候咱们这个master它确实修改好了,你可以k hello看一眼,咱们这个master test已经完事了,那接下来干嘛呀,我接下来把这个分支给它切回hot fix。
02:13
我把我的hot fix也给它修改,修改看好了,那我怎么切换啊,是不是非常简单啊,就这个get。Checkout是吧,Ch checkout这个叫hot fix hot fix,诶那我这个时候我明显看到我已经切换到了hot fix这个分支底下,那这个时候你要可以修改这个哈,TT,你看咱们这个hot fix分支是不是明显没有那个master test,那这个时候怎么玩啊,我这样我在我的倒数第一行加一个什么呀,加一个叫hot fix。Test,诶,那然后呢,这个时候干嘛呀,我WQ保存一下,我保存完事之后依旧要把这个这这个这这个文件给它添加暂存区,然后提交本地库,那怎么提交啊,我就来一个叫get at,然后呢再来一个叫点TT,然后呢再来一个get commit,然后杠M是吧,我来个什么呀,我来一个叫hold fix。
03:10
Hot fix test,然后呢,跟上我这个hello的TT,那这样一来是吧,我的hot fix也改了,然后我的master也改了,并且改了还都是同一个文件,那这是我干嘛呀,我要给它切换回master,怎么切换啊,比较简单啊,Get checkout checkout,然后master master是吧呀,走,你会发现咱们这个分支已经切回了master,那现在我就要站在master分支上,然后合并这个hot fix,大家可以看一下啊,这个是什么效果呢?来我们看一眼看好了,那这个时候我就是get mor,我要我要合并分支上,合并哪个分支上,我在我的master分支基础之上合并和fix分支,那然后就可以干嘛呀和fix,诶你这么一执行。你会发现他报的日志不太一样了,他报了一个什么呀,报了一个冲突啊,说说什么呀,说你这个自动合并fail的自动合并失败了,他不敢帮咱们自动合并了,为什么呀?因为你这一块有一个合并代码冲突,合并冲突在哪个代码里边呢?在这个hello.tst里边产生了代码冲突。
04:25
除此之外,我们还发现它这个后边小括号这个状态也发生了变化,它有一个master,然后呢,有一个这个这个竖杠,然后告诉你摸就正在合并中,说明它还没有合并成功,那这个时候其实你可以查看一下这个本地库状态,他就告诉你了,你这个hello.txt它是没有合并成功的,说你两个都修改了。啊,他你这个文件是吧,Boss moified,就是你两个分支都对它做了修改,那你说我给你保存哪一个呢?所以说这时候GI已经不敢帮咱们手动,呃自动合并了,需要你手动合并这个代码,那我怎么手动合并代码呢?你就可以手动打开这个文件,你会发现在这个文件里边啊,人家已经给你标的很清楚了,你哪一块代码发生了冲突,他是怎么给你标的呀,他是通过。
05:23
这三个特殊符号来给你标记的,首先啊,它在这个是吧,有一圈这个小于号,然后来了一个hit,这个hit就是当前分支。然后下边有个什么呀,有一堆等号啊,那这个在这个黑的跟这个等号之间,是你当前分支的代码。那到了这个等号跟这个大于号,还有这个什么荷的fix分值之间呢,是你要合并的代,你会发现明显这两块代码它都做了修改,那我这个get就不知道要保留哪一部分,那我如何手动合并呢?也非常简单,你先把它什么呀,把这个代码你要保留的给它去掉,就给它留下来,就比如说我很明显我这个master test我也想要,包括我这个hot fix我也想要,那这个时候我要把这一行给它删掉,就是把我那个master分支的最后一行我要给它删掉,那然后呢,我要把我hot fix分支的倒数第二行我给它删掉。
06:24
然后都上完之后呢,我还要把这些特殊符号我给它删掉,保证咱们这个文件,我说咱们这个代码还是16行,我都改好之后还要干嘛呀,还要WQ保存一下,保存一下。保存完事之后注意了,同学们啊,保存完之后你还要干嘛呀,你还要把你修改,就是人为修改的这个hello.txt你给它干嘛呀,你要给它添加到单存区,因为这个时候你查看这个本地状态,大家看好了啊,你查看这个本地库状态,它还是红色的,它没有被追踪,那怎么办?我就给它get at是吧,hello.tt诶我要给他这个我给他干嘛呀,我要给它添加暂存句。
07:10
添加完暂存区以后,你还要干嘛呀,你还要给他交本地库,注意这个时候提交本地库你不能干嘛呀,你有一个特殊之处,就是不能再带这个文件名了,因为我两个分支都修改了你这个hello.txt你如果带这个文件瓶,要发现它会报错,我们可以试一下,好吧,我可以干嘛呀,我给给这个get get,这个叫at,不是get at是commit get commit,你要提交这个呢,你干嘛来个叫杠M,我们写一个什么东西啊,我们写一个叫morge MAG morge是吧,就是合并test,就是合并测试嘛,我们再来一个什么呀,我们给他来一个叫hello.testt他这个时候报了一个致命的错误,说他不知道你是哪一个hello.testt那因此你干嘛呀,你这么玩,你把这个hello.txt你给它去掉,不要带这个文件名,你给它合并走,哎,那这个时候。
08:09
他就发现成功了,怎么证明成功呢?咱们这个master后边已经不再是合并中了,他没有这个摸,说明咱们这个master已经完整的把那个ho fix给它合并过来了,我手动解决了这个代码的冲突,那这个时候我就可以查,我就可以查看一下我这个hello的TXT,你会发现,诶,你这个master有了hold fix也有了,诶那不就说明咱们这个代码合并成功吗?注意啊,要再说明白,是你合并,合并只会修改master的内容,如果这个时候我切回那个什么呀,我切回我的hot fix,它的是不会修改的,可以给他演示一下,好吧,我get checkout,然后呢,Hot fix是吧,这个叫hot fix,然后这个时候你可以cat看一眼我这个合fix分支下边的内容,它还是只有合fix,没有这个master test,说明咱们这个合并分支,它只会修改你合并的那个分支。
09:12
啊,不会修改合并过来的一个分支啊,是这样的啊,那这个时候是吧,我们这个合手动解决冲突来合并这个分支,也给大家讲完了,那讲完之后最后最后最后的最后还有什么呀,还有个PPT要给他讲一讲。就是咱们这个get合并分支,它其实底层玩的也是指针,那什么意思呢?来,我把这个PPT给它放一下啊。刚才看那个文件给他讲过了,其实非常简单啊,同学们,咱们刚开始是不是只有一个master分支,而我这个master分支是不是有四个版本,那这个没问题啊,这个没问题,那关键什么呀?关键是这个时候你又来了一个分支。啊,你从这个third这个分支底下干嘛呀,你又给他来了一个叫hot fix分支,并且在这个hot fix分支上,你又给它修改了,又给他修改成了一个hot fix是吧?那这个时候如果你想合并分支了,那怎么玩啊,它合并分支其实就是这个分支切换,就是把这个hi的哎指向了这个hot fix,那这样一来,那咱们这个分支它就成功了啊,就是这个master也好或fix也好,它都是指向具体方面的指针。
10:17
二当前是在哪个分支啊,是由he的这个指针来决定的啊,这个刚才给他演示过了,就是这三个文,这三个文件给大家演示一下好吧,其实就这三个文件,首先它有一个he的文件,这个he的文件指向的是分支内容,如果我当前这个he的指向的是hot fix,那你要找到你这个hot fix的指针,你你会发现你的hot fix指向了哪个版本。啊,是这么玩的,其实get底层我玩的就是两个指针,首先它有个hit head hit指针指向的是分支,就比如说我指向的是那个master master,而我这个master指向什么呀?指向的是具体版本,我指向是哪个版本啊,那这个就不给大家说了,这个分支我们就讲完了,讲到这里啊,到此结束。
我来说两句