Git 中的分支管理相比于 SVN 中的分支管理强大太多了,至于强大到什么地步,那么本章将进行对 Git 中的分支管理讲解。
分支的作用
我们在开发过程中肯定不是一个人在开发,一个项目的开发是由一个团队进行开发的,这是就体现了版本控制工具中分支的作用了。例如:我们一个项目在 1.0 版本的时候上线了,这时候 1.0 版本虽然上线了,我们后期还是要对整个项目进行版本升级、版本维护。也就是说,我们要开始 2.0 版本的的开发,同时也要对 1.0 版本进行 BUG 进行修复。这时候我们如果全在一个 master 分支上开发肯定是不行的,所以这时候就体现了分支的优势了。使用分支,我们可以很灵活的进行一个项目的版本开发以及上线后版本 BUG 的修复等功能。
查看分支
使用 Git ,我们可以使用 git branch
命令来查看当前仓库中都有哪些分支,并且提示我们目前处于哪个分支中,如下:
说明:
上图表示当前仓库只有一个 master
分支,这是 Git 默认创建的分支,其中 master
前面的 *
表示我们当前处于这个分支中。
分支的创建和切换
分支的创建
我们可以使用 git branch <分支名>
命令来创建一个分支,如下:
分支的切换
我们可以使用 git checkout <分支名>
来切换分支,如下:
分支的创建并切换
通过上面的两个步骤做到分支的创建、切换,可能有的朋友想一步到位,分支的创建并切换一条命令即可,执行 git checkout -b <分支名>
,如下:
注意:
我们也可以执行 git checkout -
命令来切换回上一个分支,如下:
分支合并
现在我们先切换到 blog
分支中,由于 blog
分支是从 master
分支中创建的,所以 blog
分支中的内容和 master
中的内容一致,这时候,我们先编辑 blog
分支中的 a.txt
文件,然后提交,这时候,blog
分支中的 a.txt
文件和 master
分支中的 a.txt
文件的内容不相同了,如下:
上图展示了此时 master
分支和 blog
分支的不同,现在我们可以通过 git merge --no-ff <分支名>
命令将 blog
分支合并到 master
分支上。
说明:
其中 --no-ff
表示强行关闭 fast-forward
方式,fast-forward
方式表示当前条件允许时,git 直接把 HEAD 指针指向合并分支的头,完成合并,这种方式合并速度快,但是在整个过程中没有创建 commit
,所以如果当我们删掉这个分支时就再也找不回来了,因此在这里我们将之关闭。
注意:
想要合并分支,我们要先切换到 master
分支上,然后执行 git merge --no-ff blog
命令即可完成分支合并,如下:
合并成功后,我们看到了 master
分支上的 a.txt 文件内容和 blog
分支中的内容相同了。
查看分支日志
我们可以使用 git log --graph
命令来直观的查看分支的创建和合并等操作,如下:
分支的衍合
分支的衍合也是分支合并的一种方式,下面我们来看看什么是分支的衍合。在上面的基础之上,master
分支和 blog
分支的内容一致,现在我们分别向这两个分支中做一次提交,然后我们再执行如下命令,将两个分支进行合并:
# 我们要先进入到 blog 分支中
git checkout blog
# 然后进行两个分支合并
git rebase master
说明:
rebase
命令在执行的过程中会首先把blog
中的每个commit
取消,并且将之保存为临时 patch,再将blog
分支更新为最新的master
分支,然后再把那些临时的 patch 应用到blog
上,此时blog
分支将指向新创建的commit
上,那些老的commit
将会被丢弃,这些被丢弃的commit
在执行git gc
命令时会被删除。
上面的
git rebase master
命令在执行过程中有可能会发生冲突,发生冲突时我们有两种方案,一种直接退回到之前的状态,另一种就是解决冲突继续提交。
方式一:退回到之前的状态
通过如下命令实现:
git rebase --abort
方式二:解决冲突
在开发过程中,我们都是要解决冲突问题的,解决之后继续提交。发生冲突后,我们用 vi
编辑器打开冲突文件,如下:
其中 =======
上面的是 HEAD 中的内容,下面的是要合并的内容,根据自己的需求编辑文件,编辑完成之后,通过下面的两条命令解决冲突问题:
git add a.txt
git rebase --continue
然后切换到 master
分支中,再执行 git merge --no-ff blog
命令进行合并。
冲突解决
上面我们说来分支衍合中出现冲突的解决方案,其实普通的合并也会出现冲突,如果 git merge --no-ff <分支名>
合并分支时出现冲突同样时先编辑冲突文件,编辑完成后,我们再执行 git add
和 git commit
即可。
至此本章的 Git 中的分支管理我们就介绍到这里,如有疑问请留言!!!