版本控制git(三)

时间:2022-01-17 08:58:18

  通过本系列的上两篇文章(查看系列文章:http://www.cnblogs.com/jerehedu/p/4607599.html#bbkz),我们已经知道了如何使用Git完成对文件的版本控制。本次我们继续学习如何通过Git进行分支管理。

  首先,我们要弄明白什么是分支。通过git log 命令我们可以查看版本库的提交日志,如图:

版本控制git(三)

  那么这些commit之间存在什么关系呢?实际上每次commit的时候,提交对象都会保存一个指向上次一commit版本的指针,经过多次提交之后,git通过这个指针将多个提交版本串成了一个串,如下图:

版本控制git(三)

  分支实际上就是从某个提交版本向前的的历史,到目前为止Git中只有一个分支,这个分支我们称为主分支,默认名称为master。每提交一次,master就会向前移动一步,指向最新的提交版本。

创建新的分支

  那么在Git中,我们如何创建新的分支呢,非常简单可以用使用Git命令:git branch 分支名字。

版本控制git(三)

  这样我们就创建了一个名为:jredu_branch_01的分支,注意此分支是建立在当前的commit版本对象上的,如下图所示:

 版本控制git(三)

  现在我们有了两个分支,那么Git如何知道当前的工作分支呢?其实在Git中保存着一个名为HEAD的特别指针,这个指针指向了当前的工作分支。

版本控制git(三)

切换分支

  使用“git branch 分支名字”只是创建了一个分支,并不会切换到新建的分支中,如果想切换分支,我们应该使用命令:git checkout 分支名字

版本控制git(三)

  切换后,HEAD就指向了Jredu_branch_01,示意图如下:

版本控制git(三)

  我们在jredu_branch_01分支下进行工作,通过命令”git add”和”git commit”添加新的文件并提交后,新的分支示意图如下:

版本控制git(三)

  从示意图可以看出新分支jredu_branch_01向前移动了一步,而主分支master还停留在原来的版本上。

查看分支

  在Git中存在多个分支,如何查看并知道当前工作分支呢?查看命令:git branch

版本控制git(三)

  可以看到共有两个分支master和jredu_branch_01,“*”表明了当前的工作分支。

合并分支

  有了分支之后,我们就可以方便的进行协作开发,这样就可以能会产生多个分支,那么如何进行分支合并呢?Git提供的合并命令:git merge 被合并的分支

  具体步骤,首先返回master分支,其次运行合并命令:

版本控制git(三)

  这样我们就将jredu_branch_01分支合并到了master分支之上。

删除分支

  Jredu_branch_01分支被合并到master之后,就没有用处了,这里我们可以选择删除它,Git中删除分支的命令:git branch –d 要删除的分支

版本控制git(三)

合并冲突

  在合并分支的过程中,如果遇到不同的分支对相同的文件都做了修改,那么合并就不会那么顺利了,经常会看到如下的信息:

 版本控制git(三)

  这个时候git虽然做了合并,但是没有提交,需要解决冲突之后才能提交。通过git status命令我们可以看到冲突的文件

版本控制git(三)

  打开冲突的文件,我们看到具体的文件内容

 版本控制git(三)

  文件中使用“=========”分割不同的分支文件修改中冲突的部分,“<<<<<<<<HEAD”部分是master分支修改的内容,”>>>>>>>>>>>jredu_branch_01”部分是分支jredu_branch_01分支修改的内容。

  修改文件后,使用git add命令,并使用git status查看冲突 状态,并最终提交。

 版本控制git(三)

  这样就解决了冲突的问题,完成了最终的合并。

  总结一下Git分支的相关命令

创建分支:git branch 分支名字

切换分支:git checkout 分支名字

查看分支:git branch

合并分支:git merge 要合并的分支

删除分支:git branch –d 要删除分支

 

  疑问咨询或技术交流,请加入官方QQ群:版本控制git(三) (452379712)

 

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。