转载从0开始学习github系列之「团队合作利器branch」

author author     2022-08-06     579

关键词:

转载自http://stormzhang.com

Git 相比于 SVN 最强大的一个地方就在于「分支」,Git 的分支操作简直不要太方便,而实际项目开发中团队合作最依赖的莫过于分支了,关于分支前面的系列也提到过,但是本篇会详细讲述什么是分支、分支的具体操作以及实际项目开发中到底是怎么依赖分支来进行团队合作的。

1. 什么是分支?

我知道读者中肯定有些人对分支这个概念比较模糊,其实你们可以这么理解,你们几个人一起去旅行,中间走到一个三岔口,每条路可能有不同的风景,你们约定 3 天之后在某地汇聚,然后各自出发了。而这三条分叉路就可以理解成你们各自的分支,而等你们汇聚的时候相当于把你们的分支进行了合并。

2. 分支的常用操作

通常我们默认都会有一个主分支叫 master ,下面我们先来看下关于分支的一些基本操作:

  • 新建一个叫 develop 的分支

    git branch develop

这里稍微提醒下大家,新建分支的命令是基于当前所在分支的基础上进行的,即以上是基于 mater 分支新建了一个叫做 develop 的分支,此时 develop 分支跟 master 分支的内容完全一样。如果你有 A、B、C三个分支,三个分支是三位同学的,各分支内容不一样,如果你当前是在 B 分支,如果执行新建分支命令,则新建的分支内容跟 B 分支是一样的,同理如果当前所在是 C 分支,那就是基于 C 分支基础上新建的分支。

  • 切换到 develop 分支

    git checkout develop

  • 如果把以上两步合并,即新建并且自动切换到 develop 分支:

    git checkout -b develop

  • 把 develop 分支推送到远程仓库

    git push origin develop

  • 如果你远程的分支想取名叫 develop2 ,那执行以下代码:

    git push origin develop:develop2

但是强烈不建议这样,这会导致很混乱,很难管理,所以建议本地分支跟远程分支名要保持一致。

  • 查看本地分支列表

    git branch

  • 查看远程分支列表

    git branch -r

  • 删除本地分支

    git branch -d develop

    git branch -D develop (强制删除)

  • 删除远程分支

    git push origin :develop

  • 如果远程分支有个 develop ,而本地没有,你想把远程的 develop 分支迁到本地:

    git checkout develop origin/develop

  • 同样的把远程分支迁到本地顺便切换到该分支:

    git checkout -b develop origin/develop

3. 基本的团队协作流程

一般来说,如果你是一个人开发,可能只需要 master、develop 两个分支就 ok 了,平时开发在 develop 分支进行,开发完成之后,发布之前合并到 master 分支,这个流程没啥大问题。

如果你是 3、5 个人,那就不一样了,有人说也没多大问题啊,直接可以新建 A、B、C 三个人的分支啊,每人各自开发各自的分支,然后开发完成之后再逐步合并到 master 分支。然而现实却是,你正在某个分支开发某个功能呢,这时候突然发现线上有一个很严重的 bug ,不得不停下手头的工作优先处理 bug ,而且很多时候多人协作下如果没有一个规范,很容易产生问题,所以多人协作下的分支管理规范很重要,就跟代码规范一样重要,以下就跟大家推荐一种我们内部在使用的一种分支管理流程 Git Flow。

4. Git Flow

准确的说 Git Flow 是一种比较成熟的分支管理流程,我们先看一张图能清晰的描述他整个的工作流程:

技术分享

第一次看上面那个图是不是一脸懵逼?跟我当时一样,不急,我来用简单的话给你们解释下。

一般开发来说,大部分情况下都会拥有两个分支 master 和 develop,他们的职责分别是:

  • master:永远处在即将发布(production-ready)状态

  • develop:最新的开发状态

确切的说 master、develop 分支大部分情况下都会保持一致,只有在上线前的测试阶段 develop 比 master 的代码要多,一旦测试没问题,准备发布了,这时候会将 develop 合并到 master 上。

但是我们发布之后又会进行下一版本的功能开发,开发中间可能又会遇到需要紧急修复 bug ,一个功能开发完成之后突然需求变动了等情况,所以 Git Flow 除了以上 master 和 develop 两个主要分支以外,还提出了以下三个辅助分支:

  • feature: 开发新功能的分支, 基于 develop, 完成后 merge 回 develop

  • release: 准备要发布版本的分支, 用来修复 bug,基于 develop,完成后 merge 回 develop 和 master

  • hotfix: 修复 master 上的问题, 等不及 release 版本就必须马上上线. 基于 master, 完成后 merge 回 master 和 develop

什么意思呢?

举个例子,假设我们已经有 master 和 develop 两个分支了,这个时候我们准备做一个功能 A,第一步我们要做的,就是基于 develop 分支新建个分支:

git branch feature/A

看到了吧,其实就是一个规范,规定了所有开发的功能分支都以 feature 为前缀。

但是这个时候做着做着发现线上有一个紧急的 bug 需要修复,那赶紧停下手头的工作,立刻切换到 master 分支,然后再此基础上新建一个分支:

git branch hotfix/B

代表新建了一个紧急修复分支,修复完成之后直接合并到 develop 和 master ,然后发布。

然后再切回我们的 feature/A 分支继续着我们的开发,如果开发完了,那么合并回 develop 分支,然后在 develop 分支属于测试环境,跟后端对接并且测试的差不多了,感觉可以发布到正式环境了,这个时候再新建一个 release 分支:

git branch release/1.0

这个时候所有的 api、数据等都是正式环境,然后在这个分支上进行最后的测试,发现 bug 直接进行修改,直到测试 ok 达到了发布的标准,最后把该分支合并到 develop 和 master 然后进行发布。

以上就是 Git Flow 的概念与大概流程,看起来很复杂,但是对于人数比较多的团队协作现实开发中确实会遇到这么复杂的情况,是目前很流行的一套分支管理流程,但是有人会问每次都要各种操作,合并来合并去,有点麻烦,哈哈,这点 Git Flow 早就想到了,为此还专门推出了一个 Git Flow 的工具,并且是开源的:

GitHub 开源地址:https://github.com/nvie/gitflow

简单点来说,就是这个工具帮我们省下了很多步骤,比如我们当前处于 master 分支,如果想要开发一个新的功能,第一步切换到 develop 分支,第二步新建一个以 feature 开头的分支名,有了 Git Flow 直接如下操作完成了:

git flow feature start A

这个分支完成之后,需要合并到 develop 分支,然而直接进行如下操作就行:

git flow feature finish A

如果是 hotfix 或者 release 分支甚至会自动帮你合并到 develop、master 两个分支。

想必大家已经了解了这个工具的具体作用,具体安装与用法我就不多提了,感兴趣的可以看我下我之前写过的一篇博客:

/git/2014/01/29/git-flow/

5. 总结

以上就是我分享给你们的关于分支的所有知识,一个人你也许感受不到什么,但是实际工作中大都以团队协作为主,而分支是团队协作必备技能,而 Git Flow 是我推荐给你们的一个很流行的分支管理流程,也是我们薄荷团队内部一直在实践的一套流程,希望对你们有借鉴意义。

 

转载从0开始学习github系列之「向github提交代码」

转载自http://stormzhang.com之前的这篇文章「从0开始学习GitHub系列之「Git速成」」相信大家都已经对Git的基本操作熟悉了,但是这篇文章只介绍了对本地Git仓库的基本操作,今天我就来介绍下如何跟远程仓库一起协作,教你们向GitHu... 查看详情

转载从0开始学习github系列之「初识github」

转载自http://stormzhang.com1.写在前面我一直认为GitHub是程序员必备技能,程序员应该没有不知道GitHub的才对,没想到这两天留言里给我留言最多的就是想让我写关于GitHub的教程,说看了不少资料还是一头雾水,我转念一想,我当初... 查看详情

github系列之「团队合作利器branch」

Git相比于SVN最强大的一个地方就在于「分支」,Git的分支操作简直不要太方便,而实际项目开发中团队合作最依赖的莫过于分支了,关于分支前面的系列也提到过,但是本篇会详细讲述什么是分支、分支的具体操作以及实际项目... 查看详情

转载从0开始学习github系列之「git进阶」

转载自http://stormzhang.com关于Git相信大家看了之前一系列的文章已经初步会使用了,但是关于Git还有很多知识与技巧是你不知道的,今天就来给大家介绍下一些Git进阶的知识。1.用户名和邮箱我们知道我们进行的每一次commit都会产... 查看详情

从0开始学习github系列之「github常见的几种操作」

之前写了一个GitHub系列,反响很不错,突然发现竟然还落下点东西没写,前段时间GitHub也改版了,借此机会补充下。我们都说开源社区最大的魅力是人人多可以参与进去,发挥众人的力量,让一个项目更完善,更强壮。那么肯定... 查看详情

从0開始学习github系列之「07.github常见的几种操作」

之前写了一个GitHub系列,反响非常不错,突然发现居然还落下点东西没写,前段时间GitHub也改版了,借此机会补充下。我们都说开源社区最大的魅力是人人多能够參与进去,发挥众人的力量,让一个项目更完好。更强壮。那么肯... 查看详情

《构建之法》---团队合作

之前学习了两人合作的要点,现在到团队合作了,到底团队合作和两人合作之间存在着怎样的密切关联,就让我们来看看吧。一个团队,包含的人数至少是多余两个人的,不然就不会叫做团队了,但是团队也并不是只需要几个人... 查看详情

团队合作

...道:可以看一下《构建之法》的第十七章,所以这周我去学习了一下第十七章。   第十七章用“猪、鸡、鹦鹉”来展开整个章节的学习,猪代表着全身心投入,鸡代表着参与,鹦鹉代表着围观,由此可见,猪起着决定... 查看详情

构建之法阅读笔记04

...自己的任务总是认为有时间或说自己不会导致一拖再拖,开始几天还可以,到后来逐渐影响变得越来越拖延。一个团队要想有长足的发展及进步就要有一个明确的共同目标,制定完善团队成员准则,合理地绩效方式。如果是 查看详情

从0到1学习边缘容器系列之边缘应用管理

大家对使用Kubernetes管理应用已经比较熟悉,但是边缘场景下的应用部署和管理是否存在不同的需求呢?本文将和大家一起探讨边缘场景下常见的容器应用管理方案。1边缘简单服务场景在笔者接触过的边缘需求中部分用户业务场... 查看详情

《构建之法》学习——团队和流程

《构建之法》学习(5)——团队和流程 1.非团队和团队    团队共同的特点:    团队有一致的集体目标,团队要一起完成这目标    团队成员有各自的分工,互相依赖合作,共同完... 查看详情

摹客x腾讯文档,产研团队必备协作利器!

...档中查看摹客项目更方便啦! 相信在大家的日常工作学习中,对腾讯文档早已不再陌生。但是作为与摹客深度合作的小伙伴,我必须得跟大家再隆重介 查看详情

从零开始系列-r语言基础学习笔记之二数据结构

在上一篇中我们一起学习了R语言的环境搭建,这次我们开始学习R语言的数据结构第一部分:向量、数组和矩阵。一、向量向量是一维数组,其内容可以是数值、字符或布尔值,但所有数据的类型必须一致。创建向量使用的关键... 查看详情

git与github快速学习上手

...it和github,并且可以练习完它的列子。来自stormzhang从0开始学习GitHub系列之「01.初 查看详情

团队合作之云医院

...示的一些要实现的功能,关于实现的过程,还需在后面的学习当中不断的进行改进与添加。3、项目用例图:3、项目活动图:病人预约活动图系统通知活动图药房管理活动图二、个人承担的项目  本次项目我是打算做医院智能... 查看详情

通学区块链系列-从go开始之函数篇(二)(代码片段)

通学技术,面向区块链编程在第一篇文章中,我们学习了go的基本词法及语法,而这些东西都是静态的,作为一个拥有面向对象思想的我们,有静当然要有动,有属性当然也要有行为,那么什么能保证我们的... 查看详情

deepstream系列之yolox调用(代码片段)

点击查看系列文章目录该文转载于我同事的文章【Deepstream之YoloX部署】,版权归原作者所有。github:egbertYeah/yolox_deepstream(github.com)https://github.com/egbertYeah/yolox_deepstream0.目标检测算法YoloXYoloX是旷视科技于2021年提出的目标检测算... 查看详情

deepstream系列之yolox调用(代码片段)

点击查看系列文章目录该文转载于我同事的文章【Deepstream之YoloX部署】,版权归原作者所有。github:egbertYeah/yolox_deepstream(github.com)https://github.com/egbertYeah/yolox_deepstream0.目标检测算法YoloXYoloX是旷视科技于2021年提出的目标检测算... 查看详情