1 什么情况下需要新建一个分支
分支说白了就是一个新的版本,比如需要往主线分支中加一个feature,或者修改一个bug,最好是新建一个分支,开发好了,测试好了,然后再合入主线。
新建一个分支是一种开发方法论,是一种非常保守,非常可靠的开发方法。
2 远程仓库为什么需要多个远程分支
远程仓库需要多个分支主要是为了多个人协作。如果是一个人开发的话,是不需要多个远程分支的,只需要在本地创建多个分支即可。
多个人协作时,有一个主线分支,然后某个人为了加入一个特性,从主干分支拉出一个分支用于开发,然后另外一个人拉了一个分支用于开发,这样的话,远程就有3个分支了。但是,必须以主干分支为核心,也就是说,各个非主干分支在开发测试完成之后,要最重合入主干分支。
3 一个仓库里面有多个分支,这些分支之间的异同是什么
一个仓库的基本组成单位是commit,不同的分支有相同的commits,然后有不同的commits。不同的分支从主线的不同时间点分出来。
4 在本地如何操作远程仓库里面的多个远程分支
4.1 从远程分支拉一个本地主线分支
如果直接git clone 远程仓库的话,就把所有的分支都下载下来了。那么远程的这个分支已经拉下来了,现在要为它创建一个本地分支的话,直接切换到该branch,然后git branch XXX,这样XXX这个本地分支就是基于该远程分支创建的,它的commit链和远程分支的一样。或者,git checkout -b [localbranch] [remotename]/[remotebranch]
。这样,这个localbranch就是基于remotebranch
创建的。无论是哪一种方法创建,都需要再加一个tracking,git checkout --track origin/serverfix
。这样commit可以直接push到所tracking的远程分支上去。
肯定是不能直接在本地的远程分支上开发的,因为本地看到的远程分支是为了fetch server上别人提交的commit用的。
逻辑是这样的,远程分支fetch了的话,就可以把远程的commit都同步到本地仓库,然后可以merge到本地对应的tracking分支了,然后就可以git push到对应的远程分支了。可见fetch server中的远程分支中最新的commits,这是在本地看到的远程分支的唯一用途。
4.2 只是把远程的指定分支拉下来
git clone -b 2.4 --single-branch https://github.com/Itseez/opencv.git opencv-2.4
解释:
2.4是要拉的这个branch,-b和--single-branch都是git clone命令的选项。“https://github.com/Itseez/opencv.git”是这个远程仓库,
最后的opencv-2.4
是拉下来的这个分支的名字。
4.3 将远程次分支合入主线分支的方法
首先,在本地分别同步这两个分支;
其次将本地次分支版本合入本地主线分支;
最后把本地版本提交到服务器端和并入主线分支即可。
5 如何操作本地的多个分支
第一,本地的分支最终的归宿是服务器端的某个分支。也就是说,本地分支来自于某个远程分支,最终也要合并到某个远程分支。也就是说,本地分支里面有一个分支跟踪远程分支。然后在这个分支的基础上,我们还可以再创建分支,用于新特性开发等。也就是说,有一个本地主线开发分支,这个主线开发分支来自于某个远程分支。
第二,如果同时进行多个远程分支开发的话,每个远程分支对应一个本地的开发主线分支,每个本地开发主线分支又可以有自己的多个分支。
6 如何图示本地的多个分支之间的关系?如何图示远程的多个分支之间的关系
分支是由commit构成的,各个分支有自己的commit链,无论是本地的还是远程的,同一个仓库中的所有分支的commit链都有重合部分。
图示很难,因为一个项目commit有几千几万次,有的项目有几十万次commit。所以,多人开发的时候一定要按步就班。
git是提供了图是工具的,可以图示,就算几十万次,它也是有一个提交流的,用“git log --graph”就可以了。
7 分支的使用
无论是远程仓库有多个分支还是本地仓库有多个分支,使用的时候,必须要有一个主线分支,然后各个分支从主线分支开始往外延伸,各个非主线分支最重的归宿是主线分支,最重的产品来自于主线分支。