第四章 分支管理
1 创建分支
分支,顾名思义,类似于SVN的trunk和branch,虽然用了这么久没感觉出来SVN分支有什么实际意义(纯粹为了吐槽而吐槽~)。
如图4.1.2的命令,先创建了分支”dev”,再切换到分支”dev”;当然,也可以使用如图4.1.2的命令一条完成。
图 4.1.1 创建分支并切换
图 4.1.2 创建分支并切换
2 查看分支状态
当项目比较多,亦或写代码很长时间后,当我们切回git的时候有的时候估计也会比较茫然,现在是什么状况?好吧,使用如图4.2.1的命令,查看一下当前的分支吧。星星标记的当然就是当前所处的分支。
图 4.2.1 查看分支
3 分支的合并
当在子分支得瑟够了之后,就需要将子分支的成果合并到master分支了。输入图4.3.1的命令就ok了。
图 4.3.1 分支合并
4 删除分支
合并之后,子分支除非就地继续修改,否则由于时间轴的更迭,内部文件基本就失去了失效性,所以,merge完成后,我们就华丽丽地使用图4.4.1的命令吧。
图 4.4.1 删除分支
5 解决冲突
当分支出现修改文件F并且提交。与此同时,公司同事出现一个大神直接修改了Master分支的F,更神的是还提交了修改。好吧,当分支操作完成,merge的时候,那么就爆炸了,效果如图4.5.1所示。
图 4.5.1 版本冲突
提示很明显,版本出现冲突,合并失败了。
然后呢,我们打开文件如图4.5.2,一般文件中都会出现红框框部分的东东,SVN的同学们,是不是十分怀念呢?
这部分当然,需要手动修改了。
从”<<<<<< HEAD”到”==========”之间是Master分支的修改部分。
从”=========”到”>>>>>>>XXXX”是分支版本的修改部分。
孰是孰非,请自己斟酌。
图 4.5.2 版本冲突
当然,有的时候也会有突发状况,写着写着,领导冲过来大吼一嗓子,”把XXbug在XX之前修正过来,要不今天谁都别吃饭了!”为了吃饭,大家不要慌张,由于代码没有写完,不可能将当前分支提交给master,那应该怎么办呢?首先,可定不能在当前分支上改,至于为什么?你猜;所以,一般会在master或者是第一主分支上修改,如果修改了,提交了,当我们要再切换回来的时候,请看图4.5.3,由于有冲突文件,是无法切换的。当然,总会有修改的master文件F和branch中的文件A不是同一个文件的时候,但这毕竟是少数。那应该怎么办呢?
图 4.5.3
当然,编写git的少年现在没有饿死,因为他们用了下面图4.5.4这条命令:
图 4.5.4 存储
这条命令,就可以将branch分支未处理完的文件进行无parent的commit,可以简单理解为存储起来了,这种存储,可以在切换到master后,对文件进行无视冲突性修改,依旧可以切换回代码编写的分支。既然是存储了,那么就得想办法取出来,参见如图4.5.5命令就可以了:
图 4.5.5 取环境
6 多人合作
随着项目开发需求的不断变迁,有的时候可能多个人负责一个分支,也有可能一个主分支下,分出多个子分支。这个时候,就需要对其进行差异查询、处理了。
图 4.6.1 远端查询
图4.6.1命令,可以查询远端状态。当然,也可以使用图4.6.2的命令,查看更详细一些的信息。
图 4.6.2 远端查询
再温习一下推送和克隆,可以使用图4.6.3的命令对远端推送本地分支,红框部分可以更换要推送的目的分支。
图 4.6.3 推送分支
使用图4.6.4的克隆命令进行分支的获取。
图 4.6.4 克隆分支
使用图4.7.5命令将远端分支与创建的本地分支进行关联。
图 4.6.5 创建本地的远端关联分支
当编写完项目之后,正常会推送到远端服务器上,当推送发现服务器已经被同事修改并上传了某些文件,此时出现差异性问题。这个时候使用图4.6.6的命令,将远端的分支拉取到本地。
图 4.6.6 拉去远端分支
如果拉取失败,提示本地分支未和远端分支建立关联,那么需要使用图4.6.7进行关联。
图 4.6.7 本地分支与远端进行关联
7 标签管理
如图4.7.1,对当前分支下tag进行查看。
图 4.7.1 查看标签
当要对某个分支的某个状态进行打标签,先切换到该分支,查询出当前提交的版本号,
图 4.7.2 打标签
如图4.7.2,是将某个提交的版本进行打标签,如果后面没有版本号,那么就是对当前的版本进行打标签。
通过图4.7.3显示打标签节点的具体信息。
图 4.7.3 显示标签信息
图4.7.4 添加tag信息
当然,也可以使用图4.7.4的命令对标签添加一些注释的信息。
图 4.7.5 对tag进行签名
可以使用图4.7.5的命令对tag进行签名,如果签名不成功,请确认一下自己本地是否安装了GnuPG。
图 4.7.6 删除标签
如图4.7.6的命令,删除标签。
图 4.7.7 推送标签
如图4.7.7就是使用创建好的标签向远端推送。
如图4.7.8是推送所有本地标签的方法。
图 4.7.8 推送所有标签
如果标签已经推到送到了远端,如果想要删除的话,就可以使用图4.7.9的命令了。
图 4.7.9 删除远端标签