Git分支管理

Svn中也有分支管理,可是很low,Git的分支管理很是强大,本文先不去说分支管理内部到底怎么作的,咱们先来看看Git中最基本的分支管理操做。 git

本文是Git系列的第四篇,了解前面的文章有助于更好的理解本文:编辑器


1.Git概述
2.Git基本操做
3.Git中的各类后悔药测试


分支的必要性

小伙伴们都知道,咱们在完成一个项目时,不多是“单线程”开发的,不少时候任务是并行的,举个栗子:项目2.0版本上线了,如今要着手开发3.0版本,同时2.0版本可能还有一些bug须要修复,这些bug修复以后咱们可能还会发2.1,2.2,2.3这些版本,咱们不可能等全部bug都修复完了再去开发3.0版本,修复2.0的bug和开发3.0的新功能是两个并行的任务,这个时候咱们3.0的功能开发直接在master分支上进行确定不合适,咱们要保证有一个稳定,能够随时发版本的分支存在(通常状况下这个角色由master分支来扮演),此时咱们就能够灵活的使用Git中的分支管理功能: spa

1.建立一个长期分支用来开发3.0功能,假设这个分支的名字就叫v3,咱们在v3上添加新功能,并不断测试,当v3稳定后,将v3合并到master分支上。
2.建立一个特性分支用来修复2.0的bug,一旦bug修复成功,就将该分支合并到master上,一旦发现新bug,就立马再建立分支进行修复,修复成功以后再合并。 线程

以上两个步骤同步进行,这在Svn中简直是不可想象的,由于Svn的分支管理太low,而Git可以让咱们作到为所欲为的建立、合并和删除分支。指针

查看分支

咱们能够经过git branch命令来查看当前仓库有哪些分支,而咱们处于哪个分支中,以下: code

图片描述

这里显示当前仓库只有一个master分支,这是git默认建立出来的,master前面的*表示咱们当前处于这一个分支中。图片

分支建立和切换

咱们能够利用git branch <分支名>命令来建立一个分支,而后利用git checkout <分支名>来切换分支,以下:
图片描述开发

若是小伙伴以为这样太麻烦,能够经过git checkout -b <分支名>来一步到位,建立并切换分支,以下: get

图片描述

也能够经过git checkout -命令来切换回上一个分支,以下:

图片描述

分支合并

如今我切换到fa分支中,因为fa分支是从master分支中建立出来的,因此此时fa分支的内容和master分支的内容是一致的,而后我在fa分支中向git01.txt文件添加一行内容并提交,此时fa分支中的git01.txt和master分支中git01.txt的内容就不相同了,具体操做以下:

图片描述

上图展现了此时master分支和fa分支的不一样,如今我经过git merge --no-ff <分支名>命令将fa分支合并到master分支上。其中--no-ff表示强行关闭fast-forward方式,fast-forward方式表示当条件容许时,git直接把HEAD指针指向合并分支的头,完成合并,这种方式合并速度快,可是在整个过程当中没有建立commit,因此若是当咱们删除掉这个分支时就再也找不回来了,所以在这里咱们将之关闭。

想要合并分支,咱们先切换到master分支上,而后执行git merge --no-ff fa命令便可完成分支合并,以下图:

图片描述

合并成功后,咱们看到master分支上的git01.txt上已经有了fa分支中的内容了。

以图表方式查看分支

咱们能够经过git log --graph命令来直观的查看分支的建立和合并等操做,以下图:

图片描述

分支衍合

所谓的分支衍合其实也是分支合并的一种方式,下面咱们就来看看这个分支衍合究竟是什么样的。如今个人master分支的内容和fa分支的内容是保持一致的,fa是从master中建立出来的,以下图:

图片描述

如今我向fa和master中各自作一次提交,以下图:

图片描述

此时咱们执行以下两条命令将两个分支合并:

$ git checkout fa
$ git rebase master

rebase命令在执行的过程当中会首先把fa中的每一个commit取消,而且将之保存为临时patch,再将fa分支更新为最新的master分支,而后再把那些临时的patch应用到fa上,此时fa分支将指向新建立的commit上,那些老的commit将会被丢弃,这些被丢弃的commit在执行git gc命令时会被删除。合并后的分支以下图:

图片描述

上面的git rebase master命令在执行的过程当中有可能会发生冲突,发生冲突时咱们有两种方案,一种直接退回到以前的状态,另外一种就是解决冲突继续提交。

退回到以前的状态

咱们能够经过以下命令来回到以前的状态:

$ git rebase --abort

解决冲突

不过大多数状况下咱们都是要解决冲突的,解决以后继续提交。此时咱们用编辑器打开冲突的文件,看到的内容多是这样的:

图片描述

======上面的是HEAD中的内容,下面的是要合并的内容,根据本身的需求编辑文件,编辑完成以后,经过以下两条命令继续完成合并:

$ git add git01.txt
$ git rebase --continue

以下图:

图片描述

冲突解决

咱们前面提到了在分支衍合时出现冲突的解决方案,其实普通的合并也有可能出冲突,出现冲突很正常,解决就是了,git merge合并分支时若是出现冲突仍是先从新编辑冲突文件,编辑完成以后,再执行git add 和git commit便可。

好了,分支管理咱们就先说这么多,有问题欢迎留言讨论。

参考资料:

1.《GitHub入门与实践》
2.《Pro Git》

更多JavaEE和Git资料请关注公众号:

图片描述

相关文章
相关标签/搜索