关闭

GIT教程 — 浅析分支管理(一)

标签: GIT分支管理GIT教程
979人阅读 评论(0) 收藏 举报
分类:

浅析分支管理




我们在以前GIT版本回退当中我们明白了GIT本地存储的时间线,并且对它的底层原理具有一定的理解和认识,就是下图这个样子:


当然由于我们是进行演示的所以就只有一个master主分支,其实在一个大型项目中那时候相当多数目的分支的,有的人要那么多分支有什么用?

分支的用处其实就是多人协同合作的核心.  下面一张图帮我们理解分支的作用.


假设有三个平行世界,而你一无所知刚上大学,在三个平行空间里面你分别学习了C++,java,pathon 突然有一天宇宙能量失衡了,三个平行宇宙合体

了,这个时候的你就是精通C++,java,pathon的编程大佬. 其实这个事例就是分支的作用,在不同的地方开发,然后最后合并到主分支了,大家一起协

同维护主分支的代码. 通常我们刚开始创建一个本地库的时候,git会自主创建一个master分支(也就是我们的主分支),然后我们也可以创建其他分支.

在其他分支上面作业,最后一起合并到主分支之上!


分支的创建


刚刚我们已经见识到,GIT本地库的时间线,其实这个事件线就是一条分支. 截止到目前,只有一条时间线.但是在GIT当中,这个分支叫做主分支,既

master分支.HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支.

我们来看看添加一个分支dev的过程: 


一开始的时候,master分支是一条线,GIT用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:


上面我们知道从现在开始对工作区的提交和修改就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:


假如我们再dev上的工作完成了,就可以吧dev合并到master上.最简单的方法就是如图所示,直接把master指向dev的当前提交,就完成合并.

所以GIT分支合并很快!也就是改改指针,工作区内容也不变. 合并完分之后,一般来说dev分支就没有存在的理由了,所以为我们正好删除掉dev分

支,删除dev分支就是将dev指针删除掉. 删除后,我们就剩下一条master分支:


我们现在都已经get到了分支合并的原理,现在我们开始学习命令,这里主要列出查看分支,创建分支,切换分支,删除分支,以及合并分支:

创建一条分支:$ git branch xxx

查看一条分支: $ git branch

切换到一条分支: $ git checkout xxx

代码演示:



其实你也可以这样,创建一个分支并且切换到该分支上: $ git checkout -b xxx



合并其他分支到该分支上面: $ git merge xxx  注意这里合并方式有很多种,现在我们看到的是Fast-forward合并,也就是合并为"快进形式".也就是

直接把master指向dev的当前提交,所以合并速度非常快. 当然不是每次合并都能Fast-forward,其他的在后面.现在我们将分支切回master,然后合并



最后一个就是删除分支了,命令很简单: $ git branch -d xxx 下面演示:



因为分支的执行效率非常高,并且它的创建,合并,删除都非常的快,所以GIT鼓励你使用分支完成某个任务,合并后再删除分支,这和直接在master

分支上工作效果是一样的,但过程更安全.


分支冲突



当我们沉浸在合并分支的高效和完美的时候,有没有人想过如果两个分支是一个对立面他们合并好了会怎么样??  比如第一世界的小亮是一个正义的

警察,而在第二世界是一个毒枭....  这个时候,你突然将第一世界和第二世界合并那么这个小亮很大概率是一个多重人格的精神疾病患者了. 所以合

并分支,也会出现这种情况,也就是我们说过的分支冲突,所以我们来看看如何来解决这个分支冲突呢??

我们同时分别在我GIT下面的MT和master分支上面提交了liang.txt,并且提交的内容还不一样...

master的提交:



MT的提交:



现在我们看来目前为止我们的分支示意图是这样的->>>>>>>>>


这个时候,我们来尝试一下切换回主分支,然后将分支合并,尝试让我们的master分支"人格分裂"一下:



我们发现GIT不允许"人格分裂"产生,并且还帮你找到了你在哪里分裂,让我们去文件里面修改,然后只留下来一个"人格",这个时候你只能乖乖回到文

件里面,然后做出取舍将文件重新修改,并且重新git add以及git commit,这个时候其实文件已经合并结束了,也就是下图那个样子:



这个时候肯定会有人不相信,凭什么你说的我都要相信,不要以为画了几张图我就相信你(手动微笑)! 好,有质疑心没问题! 还记得我们的git log

命令吗? 接下来 我们来看看git bash上面直观的分支冲突解决之后的样子!!



最后我们再删除掉MT分支,一次完美的分支合并就结束了. 目前为止,我们对分支有了自己的理解和认识,并且可以自己创建一个分支,自己切换分支

然后合并分支,以及解决掉合并分支中的分支冲突问题. 但这些只能让你熟悉分支的用法,但并不能让你理解分支在大家合作当中是如何使用的,所以下

一个博客当中,就会有分支的管理策略,以及BUG分支,Feature分支的应用. 更加偏重于实际运用当中的用法. 但是这些都前提都是,你要熟悉分支的

基本操作.


1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Git 分支管理(Eclipse)

Git 分支管理(Eclipse) 几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间。 有人把 Git 的分支模型称为“必杀...
  • wagnteng
  • wagnteng
  • 2016-09-27 20:39
  • 1001

Git代码分支管理在项目中的实践

Git是一个非常强大的版本管理工具,
  • tiedayi
  • tiedayi
  • 2014-11-08 00:55
  • 2270

多人开发 Git 分支管理详解

大纲:  1.前言  2.创建分支  3.切换分支  4.合并分支(快速合并)  5.删除分支  6.分支合并冲突  7.合并分支(普通合并)  8.分支管理策略  9.团队多人开发协作...
  • u014041012
  • u014041012
  • 2016-02-16 20:25
  • 8616

Git分支管理规范和解析

目录 quick start why git 仓库和分支管理 远程和本地 分支管理 实战 git命令 git GUI 参考 quick_start 安装git工具可以使用git命令行,启动命令行工具 git官网下载 ssh-keygen -t rsa -C “youremail” vim ~...
  • dream_coder_21
  • dream_coder_21
  • 2017-06-15 09:32
  • 260

Git 分支管理最佳实践

Git 分支管理最佳实践 Git 是目前最流行的源代码管理工具。熟练使用 Git 已经成为开发人员的必修课之一。对于团队开发来说,如何有效的使用 Git 的分支是一个重要的课题。需要在新功能开发,新版本发布和已有版本的维护等需求中达到一个良好的平衡。另外还需要与持续集成服务有良好的集成。本文对几种...
  • jljf_hh
  • jljf_hh
  • 2017-04-01 12:42
  • 515

Git分支管理模型

参考博客: 阮一峰 分支管理策略 分支管理策略 分支管理目的: 打包方便,不影响测试效率。 分支自管理,便于开发独立性。 bug易于处理,并不影响现行开发进度。 分支管理概述: 在git服务器上,只允许存在master和dev分支。不允许出...
  • u014099894
  • u014099894
  • 2015-11-23 01:07
  • 646

基于Web的Git 管理(使用Gitblit 在windows 上部署你的Git Server)

前言   之前在dudu的文章里看到过用bonobogit 部署在 IIS 7.5 上的Window 平台的git 服务器。学着部署使用了一段时间,发现总是有那样和这样的问题。Bonobogit对Windows要求的平台也高,于是又在网上找了一下,发现其实还是有不少软件支持在Windows平台上部...
  • techbirds_bao
  • techbirds_bao
  • 2013-06-24 15:20
  • 12289

Git的版本和分支管理

Git的版本和分支管理:一步步教你使用Git管理分支和Tag
  • xiahouzuoxin
  • xiahouzuoxin
  • 2014-04-08 00:02
  • 24611

git学习之三:分支管理

介绍git版本控制的核心利器-分支(branch)。
  • xuesuc
  • xuesuc
  • 2016-05-28 15:00
  • 1036

iOS学习----------git分支管理

在iOS开发中个人觉得使用git管理代码比较方便,而在使用git时使用分支管理代码会快速解决在开发中遇到的问题。 使用场景:(1)当需要修改一个bug的时候,可以切出分支在分支上修改,不修改主线的代码,在分支上将问题解决后再合并到主线上,如果分支代码修改有问题也可以直接删除分支,重新修改,从而不会影...
  • yziOS
  • yziOS
  • 2016-03-04 15:57
  • 1866
    个人资料
    • 访问:89350次
    • 积分:2709
    • 等级:
    • 排名:第15582名
    • 原创:160篇
    • 转载:17篇
    • 译文:0篇
    • 评论:168条
    最新评论