引言

正如之前的博客中提到的,Git区别于Svn的一个最明显的功能就是分支管理功能。

那么什么是分支?分支又能为我们的开发带来什么翻天覆地的变化呢?(为了使博客的内容更具权威性和专业性,以下部分内容摘自官方文档《Git - 分支简介》)。

什么是分支

分支,顾名思义,从主干分离的枝干。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。

分支并不是Git特有的功能特性,但是相比于其他的版本控制系统,Git处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。与许多其他版本控制系统不同,Git鼓励在工作流程中频繁地使用分支与合并(branch 和 merge)。

理解和精通这一特性,我们便会意识到Git是如此的强大而又独特,并且从此真正改变我们的开发方式。

创建分支

创建分支的命令是git branch :

$ git branch testing

根据Git的工作原理(在此不做讨论,可以参见《起步 - Git基础》),上面这行命令会在当前所在的提交对象上创建一个指针。

此时,两个指向相同提交历史的分支,而Git又是如何知道当前在哪一个分支上呢?其实,Git中还存在一个名为HEAD的特殊指针。在Git中,HEAD指向当前所在的本地分支(将HEAD想象为当前分支的别名)。$ git branch命令仅仅会创建一个新分支,并不会自动切换到新分支中去。


可以使用$ git log 命令查看各个分支当前所指对象。

$ git log --oneline --decorate
f30ab (HEAD, master, testing) add feature #32 - ability to add new
34ac2 fixed bug #1328 - stack overflow under certain conditions
98ca9 initial commit of my project

可以看到,当前master和testing分支都指向校验和以 f30ab 开头的提交对象。

切换分支

更换到一个已经存在的分支,需要使用$ git checkout 命令。

$ git checkout testing

可以再次进行开发,并提交:

$ vim test.rb
$ git commit -a -m 'made a change'

执行完提交后,HEAD分支就会随着提交操作自动向前移动,如上图所示,testing 分支向前移动了,但是master分支却没有,它仍然指向运行 git checkout 时所指向的对象。

我们再次切换回 master 分支上:

$ git checkout master

checkout 时HEAD随之移动,这条命令完成了两件事:第一是将HEAD指向 master 分支,第二是将工作目录恢复成master 分支所指向的快照内容。也就是说,你现在做修改的话,项目将始于一个较旧的版本。本质上来讲,这就是忽略 testing 分支所做的修改,以便向另一个方向进行开发。

此时,如果我们不进行分支合并(merge操作),而是朝着另一个方向进行了修改,那么我们就会出现如下图所示的分支结构:

可以看到,项目的提交历史已经产生了分叉。因为刚才我们创建了一个新分支,并切换过去进行了一些工作,随后又切换回 master 分支进行了另外一些工作,上述两次改动针对的是不同的分支:你可以在不同分支间不断地来回切换和工作,并在时机成熟时将他们合并起来。

项目分叉历史

使用 $ git log命令查看分叉历史。它会输出你的提交历史、各个分支的指向以及项目的分支分叉情况:

$ git log --oneline --decorate --graph --all
* c2b9e (HEAD, master) made other changes
| * 87ab2 (testing) made a change
|/
* f30ab add feature #32 - ability to add new formats to the
* 34ac2 fixed bug #1328 - stack overflow under certain conditions
* 98ca9 initial commit of my project

Git的分支实质上仅包含所指对象校验和(长度为40的SHA-1 值字符串)的文件,所以它的创建和销毁都异常高效。因为创建一个新分支就相当于往一个文件中写入1个换行符和40个字符,因此十分迅速。

综上,就是Git的分支管理相关的概念和模型,如有疑问欢迎文末留言。

参考:

《Git - 分支简介》

Git初学札记(五)————Branch分支管理相关推荐

  1. Git初学札记(七)————合并分支(merge)

    目录 引言 开始Merge 1.History视图 2.Team菜单 3.Git Repositories视图 巧用Git Staging视图 放弃Merging 可能的Merge结果 引言 Git鼓 ...

  2. Git笔记(13) 分支管理

    Git笔记(13) 分支管理 1. 分支管理工具 2. 查看分支列表 3. 查看分支最后一次提交 3. 查看已合并分支列表 4. 查看未合并分支列表 1. 分支管理工具 在 Git学习笔记(12) 分 ...

  3. Git三大特色之Branch(分支)

    转自: https://blog.csdn.net/qq_32452623/article/details/78355976 我习惯每篇博客都有个开篇 还记得 Git 系列第一篇 Git 自我介绍的话 ...

  4. git学习(三)分支管理

    分支管理 git学习参考 廖雪峰官方网站 git基本操作,一篇文章就够了! 一.分支作用 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交 ...

  5. Git之深入解析Git的杀手级特性·分支管理与分支变基的开发工作流以及远程分支的跟踪

    一.Git 分支简介 几乎所有的版本控制系统都以某种形式支持分支,使用分支意味着可以把工作从开发主线上分离开来,以免影响开发主线.在很多版本控制系统中,这是一个略微低效的过程,常常需要完全创建一个源代 ...

  6. Git本地库版本控制和分支管理

    版本控制 ①git log [parameter] 查看版本记录(使用Hash值指向相关信息,只显示之前的版本) 常用参数: –pretty = oneline (或 --oneline,缩短Hash ...

  7. Git学习05 --分支管理02

    1.冲突 产生冲突后,查看readme.txt   可以看到冲突内容 <<<<<<< ======= >>>>>>> ...

  8. Git配置、版本控制与分支管理

    文章目录 一.创建版本库 1. 配置git环境 二.时光机穿梭 1. 版本回退 2. 撤销修改 3. 删除文件 三.分支管理 1. 创建与合并分支 2. 解决冲突 3. Bug分支 4. 多人协作 参 ...

  9. 史上最简单的git教程|第九篇:分支管理工具

    在上一篇我们讲到了如何创建合并分支.如何解决冲突以及如何删除分支,那么接下来我们将讲到一些常用的分支管理工具. 获取所有分支列表: $ git branch * b1master 可以看书一共有两个分 ...

最新文章

  1. 字体在ppt中可以整体替换吗_干货,做PPT时这样选择字体,瞬间提升幻灯片档次,看完你就懂了...
  2. 坚果pro2s7.0.1系统更新截图(订阅号长截图测试)PhotoScape图片编辑器应用
  3. 【网络爬虫入门04】彻底掌握BeautifulSoup的CSS选择器
  4. 准备刺第一针了(飞秋官方下载)
  5. word 2007如何插入参考文献引用
  6. Python vim 环境搭建
  7. java拦截器_Java拦截器实现
  8. .config文件相关说明
  9. 微信小程序开发图片太多怎么办
  10. 从阿里一面谈面试需要准备什么
  11. checksum命令 linux_Linux命令大全完整版
  12. 数理逻辑习题集(3)
  13. 矩阵分析之 实矩阵分解(4)满秩分解,QR分解
  14. 怎么转换书法字体?教你快速转换毛笔字体
  15. 顶部BANNER广告图片放大后再自动缩小消失
  16. html表头解释_1分钟内解释的html
  17. 取得高等学校教师资格证应当具备什么学历要求
  18. html canvas粒子线条组合动画背景特效
  19. 一步一步安装 Microsoft .NET Pet Shop 4.0
  20. 通过Uip WebClient 实现中应用DNS解析

热门文章

  1. stl min函数_std :: min_element()函数以及C ++ STL中的示例
  2. Java中的一些坑,汇总篇(2万字)
  3. 别在Java代码里乱打日志了,这才是正确的打日志姿势!
  4. 关于C#监视剪贴板信息
  5. Windows巡检IIS指标脚本(PowerShell实现)
  6. python爬取新闻网站标题_python如何正确抓取网页标题
  7. C++PrimerPlus学习——第十三章编程练习
  8. 计算机专业410分能上哪些大学,2021年高考410分能报什么学校
  9. linux ptrace 读内存,Linux高级调试与优化——ptrace
  10. java web后台_java web 后台那些事