Git分支是Git中非常重要的一个概念,无论是个人开发还是多人协作中,分支都起着至关重要的作用。几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
概念
Git的分支可以被看作是项目历史的一个快照或者说是一个指针,它指向你所做的提交。当你创建一个新的分支时,Git会创建一个新的指针供你移动。当你进行提交操作时,这个分支指针就会向前移动。
这样理解可能把它想象成“鸣人的多重影分身之术”,相当于在当前状态,创建出一个一模一样的自己。比如现在我觉得我学习的效率太低了,我创建出三个分身分别去做其他的事情A学数学,B学语文,C学英语。等到他们学习完了,我再把ABC三个分身收回来,这样他们学习到的知识就整合到我的脑子里了。而这种方式在我们协作开发的过程中经常使用,每个人负责一个功能模块,完成后将我们做好的功能模块合并到主分支中。
操作
Git分支常用的几种操作包括:
- 创建分支
git branch 分支名称 - 查看分支
git branch - 切换分支
git checkout 分支名称
git checkout -b 分支名称:可以创建一个分支,并且直接切换到这个分支。 - 合并分支
先切换到你要合并到的那个分支,然后在给分支下输入指令git merge 分支名称。
上图中HEAD箭头指向的表示当前分支,可以看到在合并分支之前,master分支中只有一次提交file01.txt记录,而dev分支中则包括了file01.txt和file02.txt文件的提交记录。再将dev分支合并到master之后,他们两个的内容就保持一致了,包括提交记录也是一样的。
(注:这里的git-log命令是我设置的别名,用来查看日志的,至于设置别名的方式可以参考我前一篇文章的内容) - 分支冲突
我们同时在master分支和dev分支修改同一个文件的内容,并且修改的内容不一样,就会出现分支冲突,这就好像上面分身的例子中,我派遣A去学数学,B也去学数学,结果他们两学到的知识不一样,这个时候就会存在冲突,需要我们自己手动的再去判断到底谁是对的。
这个时候我们通过git-log命令查看分支情况,可以看到再add file02.txt之后,出现了分岔路口,这表明两个分支出现了不一样的操作,mastter分支的操作是master = 1,dev分支的操作是dev=2。此时我们使用git merge命令会出现下图情况:
这句话就是再提示我们,合并过程中存在冲突,让我们解决冲突后重新提交。此是我们看看冲突文件 file01.txt的内容如下:
文件中通过等于号将冲突内容分隔开,上半部分表示当前分支的内容,下半部分表示dev分支的内容。解决冲突的方式也很简单粗暴,直接把这个文件改成你想要的样子,然后重新提交一遍即可: - 删除分支
git branch -d 分支名称:检查删除(检查当前分支是不是还存在有用的东西没有合并到其他分支,或者有记录没有提交等等。如果都没有就删除)
git branch -D 分支名称:强制删除,不做检查。
几条常用原则
- master (生产) 分支 线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;
- develop(开发)分支 是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线 要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。
- feature/xxxx分支 从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。
- hotfix/xxxx分支, 从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、 develop分支。
- 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等 等。
以上就是分支的一些常见概念以及基本操作, 经过前面几篇文章,以及本章节的介绍,在本地仓库使用Git来管理代码已经没有什么问题了,后续文章会继续介绍如何创建远程仓库,以及如何在IDEA中使用Git。