几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间。
有人把 Git 的分支模型称为“必杀技特性”,而正是因为它,将 Git 从版本控制系统家族里区分出来。Git 有何特别之处呢?Git 的分支可谓是难以置信的轻量级,它的新建操作几乎可以在瞬间完成,并且在不同分支间切换起来也差不多一样快。和许多其他版本控制系统不同,Git 鼓励在工作流程中频繁使用分支与合并,哪怕一天之内进行许多次都没有关系。理解分支的概念并熟练运用后,你才会意识到为什么 Git 是一个如此强大而独特的工具,并从此真正改变你的开发方式。
了解分支如果想实现多人协作、划出Bug区、Feature区等功能,就需要分支功能。(确实很强大的地方)
每次commit时,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。而此时HEAD也指向master。
每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。
当我们创建新的分支dev的时候,将HEAD指向dev,这时候就在dev分支上了。
创建和进入分支创建分支:git branch 分支名字
进入分支:git checkout 分支名字
创建并且进入分支:git checkout -b 分支名字
如果想查看当前在哪个分支:git branch
合并分支如果在dev分支下提交一张照片,此时,工作区是有照片的(在文件夹查看)。然后切换到master分支,会发现本地的工作区被刷新了一下,然后图片不见了。在命令行ls查看文件列表也没有图片(如截图所示)。此时,需要将dev分支合并到master分支。
合并分支:git merge 分支名字。将分支合并到当前分支。这时可以发现,照片出现了。(附截图)
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。当然,也不是每次合并都能Fast-forward。
如果加上--no-ff参数就是普通合并模式。这样就保留了历史信息。
解决分支冲突如果两个或多个分支对同一文件作出不同的操作,合并的时候就会有冲突。
如下面截图先在dev中修改txt,再在master中作出不同的修改。
此时,git merge dev就会报错,提醒有冲突,需要手动解决
当然,也可以通过git status查看,会发现both modified的错误提示。或者cat temp.txt,不同分支的修改的不同之处被标注了出来。
在当前分支修改文件内容并且再次提交修改,即可以解决冲突。
删除分支一条命令:git branch -d 分支名字即可删除
如果分支还未合并到当前分支:git branch -D 分支名字 强制删除。
团队协作(分支策略)在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了
最后发布时,再将dev合并到master
更多 Git 教程系列文章:
Ubuntu Git安装与使用