首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Git教学篇5-git必杀技特性,分支管理

前言

今天这篇文章我们继续git教学的第五篇,主要讲解的是git的分支管理,这也号称是git的‘必杀技特性’。

git

分支是什么?

git通过保存一系列不同时刻的文件快照来实现数据存储。

每次在进行git提交时,都会生成一个提交对象,这个提交对象都会产生一个指向暂存区内容快照的指针。而且每个提交对象中都会包含一个指向上一次提交(父提交对象)的指针。

通过这一系列指针的指向,就构成了一个分支上的所有提交记录。如下图中,一个分支上的三次提交记录,生成三个版本快照,然后通过指针相连。

提交记录

因此对于分支,我们可以理解为指向提交对象的可变指针。

分支创建与切换

对于每个git仓库都有一个默认的master分支,实际上master分支和其他自定义分支没有任何区别。

我们可以通过git branch命令去创建一个新的分支,但是并不会直接切换至新建的分支。如果需要切换到新的分支,是通过git checkout命令。

如果我们需要将这两步操作合并为异步,则可以通过git checkout加-b参数实现。

这也意味着以下的命令是等价的。

$ git branch dev

$ git checkout dev

$ git checkout -b dev

因为分支的创建都是基于指针的,那么在拥有多个指向相同历史的指针时,git怎么知道当前是在哪个分支呢?

在git中有一个特殊的HEAD指针,指向的是当前所在本地分支的最新快照,当我们切换到新的分支中时,HEAD分支也会随着移动。

如下图中,有master和testing两个分支,HEAD指针指向的是master,表示的是当前处于master分支上。

HEAD指针

通过git branch命令也可以查看当前处于哪个分支上。如果当前在哪个分支上,则在分支名之前有一个‘*’标识。

git branch

分支的合并

在一个上线的项目中,一般至少会有多个用于运行的分支,比如生产环境一般是master分支,开发环境下的dev分支,测试环境下的test分支,还有一系列的个人开发分支self。

分支的合并有merge指令即可完成,merge完成后两个分支记录将处于同一个状态。

比如我们在发现一个线上问题时,需要由master分支新拉一个hotfix分支进行问题的修复,此时的分支情况可能如下如所示。

分支记录

在hotfix分支上修复完问题后,可以切换至master分支,然后将hotfix分支合并至master分支。

合并分支

在分支合并完后,分支情况如下图所示。

合并后的分支

删除本地分支

当我们不再需要一个本地分支时,可以通过-d参数来删除它。

有一点需要注意的是,需要先checkout到别的分支才能删除需要删除的分支。

如上一个例子,当hotfix修复完毕后可以将hotfix分支删除。

删除分支

有冲突时的分支合并

当多人协同开发时,出现文件冲突是一件很常见的事情。

冲突的原因是同一个文件的同一个部分,在不同的分支中都有修改,这样git就无法自动合并,而是将有冲突的信息暴露出来交由开发人员自己修改后再进行合并。

当我们通过merge命令合并有冲突的分支时,会出现CONFLICT字眼,如下图中的提示信息。

冲突提示

当出现冲突时,是无法merge成功的,后续的操作也将被阻塞住,因此解决冲突是一步必要的操作。

冲突文件内容

如果文件冲突后,我们打开冲突的文件,冲突部分的内容会有很明显的

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180306A0MGR900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券