git的分支管理也是其非常强大的地方。
我们可以这样理解分支管理的作用:当大家一起来开发维护一个项目时,我们每天都会对文件进行更改,那么我们每个人的更改都是相互独立的,我们并不知道对方做了什么,而且我们也不希望自己的工作做到一半时会被别人添加进新的东西,那么此时如果我们创建一个属于自己的分支,在自己的分支上干活,直到你认为做好了然后提交上去,这不就解决了相互影响的问题了嘛。
git 的分支管理功能很强大,速度非常快,因为它只是改变一些指针,增加一些指针,工作区的内容不变。
创建分支:我们知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:
每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长:
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!
不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
所以Git合并分支也很快!就改改指针,工作区内容也不变!
合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:
开始实战:
首先我们创建分支:git branch dev
切换到这个新的分支:git checkout dev
用git branch查看当前分支,这个命令会列出所有分支,当前分支前面有一个*号。
现在尝试在dev分支上对readme.txt进行更改并提交。
现在我们切换回master分支,然后查看readme.txt的内容,你会发现,你刚才的更改并没有出现,这就体现了分支的作用,我们是在dev分支下更改的readme.txt,并不会影响master分支下的内容。
现在我们把这两条分支合并:git merge dev git merge命令用于合并指定分支到当前分支.
现在在查看readme.txt文件,你会发现内容已经改变。
现在我们就可以删掉dev这个分支了,git branch -d dev
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。