您的位置:首页 > 其它

Git中创建与合并分支

2017-09-02 18:09 211 查看


原文地址:http://blog.csdn.net/gao_chun/article/details/72499890


为什么需要使用分支?

在总结Git中创建与合并分支前,我们必须要对为什么使用分支,它有什么用,为什么不能在主分支上直接干活,…. 等等一些列问题做一个阐述,不然我们都不知道用这个东西干嘛,以及为什么要用它。

这里从两点进行阐述:


一、分支的作用

分支的概念在各个版本控制系统中早已存在,分支对于团队协作开发来说作用是非常大的,如:

当一个项目还是1.0版时,开发团队可能要同时进行1.1版和2.0版的开发,此时,代码就会出现较大分歧,这时就需要用到分支了,不同的任务组在各自不同的分支上开发,互相之间不会影响。 

需要向项目中添加一个新功能,一般的团队都不会直接在主分支上修改而是新建一个branch,在上面更改代码,这样做的好处一是保证主线代码的完整性和可用性,也就是说,主线上都是稳定的代码,可以直接拿来发布。二是避免出现其他问题。 

发布是所有的功能模块的集成,分支可能是零散功能的半成品。 

万一出现冲突很严重,或者出现各种情况而造成当前的分支出了问题,冲突解决起来很麻烦,如果有一个分支始终保留着最新的稳定版本,最多就是吧当前分支删掉,从那个稳定分支重新分一支出来,这样处理起来更方便。 

假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的风险,又或者丢失向领导汇报工作进度的风险。有了分支后,你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。


二、分支在Git上的特点

Git的技术可以说是非常强大,说一切开发都依赖于分支一点都不过分。一般项目的master分支都是稳定的代码,可以直接发布或者被项目之外的人使用。 

新特性和BUG修改都在不同的分支上进行开发和测试,这样规范了整个软件的开发流程。 

分支之间的互不影响这种特性可以增加团队合作的效率。 

Git分支的另外一个重要特性就是可以合并不同软件仓库(fork)的分支。如:开发团队有一个主软件仓库,开发者可以fork这个仓库,相当于克隆了一个私有的软件仓库,然后开发者就可以在自己的软件仓库中建立分支并开发测试,测试完毕之后,可以向主软件仓库提交merge request,这样新开发的特性就会被合并到主软件仓库的某个分支中。这种特性极大地推动了开源项目,多年前参加开源项目都是神话,自从Git出现后,每个人都可能成为开源项目的贡献者,就是基于这种特性。 

其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,让人无法忍受,结果分支功能成了摆设,基本都不去用。但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。


三、创建与合并分支

在版本回退里中已经知道每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。 

如果没有创建过任何分支的情况下,Git中只有一个分支,叫主分支(即master分支)。

当我们创建新的分支,例如test时,Git新建了一个指针叫test,指向master相同的提交,再把HEAD指向test,就表示当前分支在test上。

注:Git创建一个分支很快,因为除了增加一个test指针,改改HEAD的指向,工作区的文件都没有任何变化!

假如我们在test上的工作完成了,就可以把test合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向test的当前提交,就完成了合并。

注:Git合并分支也很快!就改改指针,工作区内容也不变!

合并完分支后,也可以删除test分支。删除test分支就是把test指针给删掉,删掉后,就剩下了一条master分支了。


四、操作命令

创建并切换分支 (git checkout -b test )

$ git checkout -b test 

Switched to a new branch ‘test’

注:git checkout命令加上-b参数表示创建并切换,相当于执行了以下两条命令:

$ git branch test

$ git checkout test 

Switched to branch ‘test’

查看当前分支 ( git branch ) 

然后,用git branch命令查看当前分支:

$ git branch 

*test 

master

git branch命令会列出所有分支,当前分支前面会标一个*号。此时,我们就可以在test分支上进行开发并正常提交。

分支的切换 (git checkout master )

如果在test分支上完成了开发,我们可以切换回master分支:

$ git checkout master 

Switched to branch ‘master’

注:当切换回master分支后,其实内容是不会有任何改变的,因为你所做的修改和提交工作全部在test分支上完成,而master分支的提交点是没有任何改变的。

分支合并 (git merge test)

我们试着把test分支下的工作成果合并到master主分支上:

$ git merge test 

Updating d17efd8..fec145a 

Fast-forward 

……. | 1 + 

…. file changed, 1 insertion(+)

git merge 命令用于合并指定分支到当前分支。注意这里是切换到了master主分支,将指定分支test合并过来。合并后,可以发现master主分支的内容和test分支的最新提交是完全一样的。

注:上面的Fast-forward信息是Git告诉我们,这次合并是“快进模式”,也就是直接把master指向test的当前提交,所以合并速度非常快,当然也不是每次合并都能Fast-forward,后续会总结其他方式的合并。

删除本地分支 (git branch -d test)

合并完成后,若不再需要test分支,也可以放心的删除:

$ git branch -d test 

Deleted branch test (was fec145a).

删除后,再次运行 git branch 命令,可以看到只剩下master分支了。

建议:因为创建、合并及删除分支都非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,其实这和直接在master分支上工作效果是一样的,但过程更安全。



五、总结(本地对分支的操作)


查看分支:git branch


创建分支:git branch <name>


切换分支:git checkout <name>


创建+切换分支:git checkout -b <name>


合并某分支到当前分支:git merge <name>


删除分支:git branch -d <name>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: