了解git分支和版本管理

2023-05-16

0. Git分支和标签的命名规范

   1.分支

     dev/test/pre/pro(即master)

   2.标签

     Tag格式: 主版本号.次版本号.修订号-类型标签,其中类型标签可为:alpha、beta、rc、r。

     Tag示例:1.0.0-alpha、1.0.0-beta、1.0.0-rc、1.0.0-r

     注1:有的公司在版本命名时,前面加v,“-”替换成“_”,更加详细一点还可以在修订号后面添加发布日期

          v1.0.0.191220_alpha,这都是可以的

   3.分支与标签的关系

     dev-->alpha

     test-->beta

     pre-->rc

     pro-->r

1. 分支在实际中有什么用呢?

   假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,

   不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

   怎么办?

   现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,

   而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作

2. 四个环境以及各自的功能特点

   四个环境分别是:dev、test、pre、pro(master),中文名字:开发环境、测试环境、灰度环境、生产环境

jquery.js

jquery.min.js

   dev环境:开发环境,外部用户无法访问,开发人员使用,版本变动很大。

   test环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定

   pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样。

   pro(master)环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境。

   开发环境->测试环境->灰度环境(测试服)->生产环境(正式发布的完整的项目)

3. 分支策略

   在实际开发中,我们应该按照几个基本原则进行分支管理:

   1.首先,pro分支(即master)应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;product

   2.那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,

     再把dev分支合并到master上,在master分支发布1.0版本

   3.修复bug时,我们会通过创建新的bug分支(即test)进行修复,然后合并,最后删除;

   4.当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场

   

## 学习时,先暂不考虑远程问题,本地搞懂了,再考虑远程问题

4. 分支相关命令

   1.查看分支,此命令会列出所有分支,当前分支前面会标一个*号

     git branch           //查看本地分支

     git branch -a        //查看远程分支

   2.创建分支

     git branch name      //仅仅保存本地,远程还需要push

     git push <远程仓库名> <远程分支名>

     

   3.切换分支

     git checkout name

   4.创建+切换分支

     git checkout -b name

   5.合并某分支到当前分支

     git merge name

     注意:当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

           使用用git log --graph命令可以看到分支合并图。

   6.删除分支(分本地和远程)

     git branch                      //查看本地分支

     git branch -d name              //删除本地分支

     git branch -a                  //查看远程分支

     git push origin --delete dev   //删除远程分支

   7.重命名本地分支,并提交到远程

     1.重命名

       git branch -m oldBranchName newBranchName

     2.删除远程分支

       git push origin :oldBranchName

     3.将重命名过的分支提交

       git push origin newBranchName

     1.git branch -m 要改的本地分支名 修改后的分支名(修改本地分支)

     2.git push origin :远程修改前的分支名(删除远程分支)

     3.git push origin 修改后的分支名:修改后的分支名(push 到远程分支)

     4.git branch --set-upstream 修改后的分支名 origin/修改后的分支名(绑定远程分支)

5. git操作之pull拉取远程指定分支以及push推送到远程指定分支

   1.pull操作

     1.将远程指定分支 拉取到 本地指定分支上

       git pull <远程仓库名> <远程分支名>:<本地分支名>

     2.将远程指定分支 拉取到 本地当前分支上:

       git pull <远程仓库名> <远程分支名>

     3.将与本地当前分支同名的远程分支 拉取到 本地当前分支上

       git pull <远程仓库名>

     在克隆远程项目的时候,本地分支会自动与远程分支建立追踪关系,可以使用默认的origin来替代远程仓库名,

     所以,我常用的命令就是 git pull origin <远程仓库名>,操作简单,安全可控。

   2.push操作

     1.将本地当前分支 推送到 远程指定分支上(注意:pull是远程在前本地在后,push相反)

       git push <远程仓库名> <本地分支名>:<远程分支名>

     2.将本地当前分支 推送到 远程指定分支上

       git push <远程仓库名> <远程分支名>

     3.将本地当前分支 推送到 与本地当前分支同名的远程分支上

       git push <远程仓库名>

     推荐使用第2种方式,git push origin <远程分支名>

  

6. Git如何给branch打tag

   发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。

   将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照

   1.查看所有标签

     git tag

     注1:标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息

   2.创建tag

     1.首先,切换到需要打标签的分支上,例如:dev,再创建标签

       git branch

       git checkout dev

       git tag 1.0.0-alpha

      

       tag标签就是版本号,在版本号是整个项目的,并不是某个模块的

     2.推送标签到远程

       git push origin 1.0.0-alpha

       注1:因为创建的标签都只存储在本地,不会自动推送到远程,还需要手动推送

     3.git标签分为两种类型:轻量标签和附注标签,区别:附注标签带注解

       git tag 1.0.0-alpha                         //创建轻量标签

       git tag -a 1.0.0-alpha -m "一期开发完成"    //创建附注标签

       一般推荐打带附注信息的标签,这样可以最大限度查看标签版本的修改情况

   3.删除tag

     1.删除本地tag

       git tag -d 1.0.0-alpha

       注1:因为创建的标签都只存储在本地,不会自动推送到远程。所以,标签可以在本地直接删除

     2.删除远程tag

       1.如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除

         git tag -d 1.0.0-alpha

       2.然后,再从远程删除。删除命令也是push,但是格式如下:

         git push origin :refs/tags/1.0.0-alpha

       

## GUI工具为:TortoiseGit

## 分3个部分:dev/test如何进行代码修复

##            dev->test->pre->pro的发布

##            产品升级重新发布

7. 实战:分支与版本

   dev/test/pre/pro(即master)

   1.克隆远程库test1

     git clone git@github.com:yanppp999/test1.git

   2.依次创建dev/qas/pre分支(pro即master,已存在不用再创建),然后切换到dev分支

     git branch dev

     git branch test

     git branch pre

   #add(int a, int b){a+b+b}   v1.0.0

   #add(int a, int b, int c)   v1.1.0

   #add(int... arr)            v1.2.0

   3.创建并编辑Cal.java类,添加一个add(int a,int b)方法,然后三步曲:add->commit->push(*****)

     git add Cal.java

     git commit -m '项目一期完成'

     git push origin dev

     注1:在有分支情况下,push命令需要添加远程仓库名和分支名这两个参数

          git push origin dev

     注2:doc窗口切换到master,输入ls命令,Cal.java是找不到的,同理在github网站上,也要选择dev分支才能看到Cal.java文件

          git branch master

          ls

     至此,项目一期工作完成,接下来进行测试阶段(会在dev-test两个分支间不断切换)

     

     ## 标签相关内容,在分支讲完之后,再重新添加进来

     ## 下面命令此步骤先跳过

     ## 创建并推送标签“dev-1.0.0”至远程

     git checkout dev

     git tag 1.0.0-alpha

     git push origin 1.0.0-alpha

   

   5.将dev合并到test,并

     git checkout test

     git merge dev

     git push origin qas

   6.测试结束之后,创建标签:qas-1.0.0

     git tag qas-1.0.0

     

   7.将qas合并到pre

     git checkout pre

     git merge qas

     git tag pre-1.0.0

   8.将pre合并到master

     git checkout master

     git merge pre

     git tag prd-1.0.0

   注1:实际生产中的APP或软件软件版本命名规范详解,详情可参考:资料/12,资料/13

        v1.0.0.191202_be.d

        v1.0.0.191210.t

        v1.0.0.191221.rc

        v1.0.0.191225.r

        

     

   

8. git clone指定branch或tag

   1.取完整

     git clone https://github.com/arvidn/libtorrent.git

   2.使用指定branch

     git checkout origin/dev

   3.使用指定tag

     git checkout 1.0.0-alpha   

  4.也可以在clone的时间指定tag或branch:

    git clone -b RC_1_1 https://github.com/arvidn/libtorrent.git

    git clone -b libtorrent-1_1_9 https://github.com/arvidn/libtorrent.git

## 作业

9. 综合案例(idea环境):分支与版本

附录一:DEV SIT UAT PET SIM PRD PROD常见环境英文缩写含义

DEV development 开发

SIT System Integrate Test 系统整合测试(内测)

UAT User Acceptance Test 用户验收测试

PET Performance Evaluation Test 性能评估测试(压测)

SIM simulation 仿真

PRD/PROD production 产品/正式/生产

附录二:项目开发中DEV、QAS、PRD是什么意思

IDES:Internet Demonstration and Evaluation System 交互式演示与评估系统

DEV:Development System,开发系统

QAS:Quality Assurance System,质量保证系统

UAT:User Acceptance Test 用户验收测试

PRD:Production System,生产系统

附录三:git stash 应用场景

我们有时会遇到这样的情况,正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,

但是新功能做到了一半你又不想提交,这时就可以使用git stash命令先把当前进度(工作区和暂存区)保存起来,

然后切换到另一个分支去修改bug,修改完提交后,再切回dev分支,使用git stash pop来恢复之前的进度继续开发新功能

详情见:资料/08

附录四:场景应用“分支的新建与合并”

        实际工作中你可能会用到类似的工作流。 你将经历如下步骤

        1.开发某个软件

        2.为实现某个新的需求,创建一个分支。

        3.在这个分支上开展工作。

        正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。 你将按照如下方式来处理

        1.切换到你的线上分支(production branch)。

        2.为这个紧急任务新建一个分支,并在其中修复它。

        3.在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。

        4.切换回你最初工作的分支上,继续工作。另外,不要忘记将这个BUG在当前分支中进行修复(重要~~~重要~~~重要~~~)

附录五:实际生产中的APP或软件软件版本命名规范详解(详情可参考:资料/12、资料/13)

1.软件版本阶段说明

  1.Base版:

    此版本表示该软件仅仅是一个假页面链接,通常包括所有的功能和页面布局,但是页面中的功能都没有做完整的实现,

    只是做为整体网站的一个基础架构

  2.Alpha版:

    此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,

    该版本软件的Bug较多,需要继续修改

  3.Beta版:

    该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,

    需要经过多次测试来进一步消除,此版本主要的修改对像是软件的UI

  4.RC版:

    该版本已经相当成熟了,基本上不存在导致错误的BUG,与即将发行的正式版相差无几

  5.Release版:

    该版本意味“最终版本”,在前面版本的一系列测试版之后,终归会有一个正式版本,是最终交付用户使用的一个版本。

    该版本有时也称为标准版。一般情况下,Release不会以单词形式出现在软件封面上,取而代之的是符号(R)。

2.版本命名规范

  软件版本号由四部分组成,第一个1为主版本号,第二个1为子版本号,第三个1为阶段版本号,第四部分为日期版本号加希腊字母版本号,

  希腊字母版本号共有5种,分别为:base、alpha、beta、RC、release。例如:1.1.1.051021_beta。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解git分支和版本管理 的相关文章

  • eagle pcb v8.2 便捷性大大提升

    eagle pcb在被Autodesk收购之前是7 x版本 xff0c 但是却有一些一直被吐槽的东西 xff0c 说实话这些东西确实增加了布线难度 xff0c 增加了布板时间 xff1a 1 real time DRC xff1a 在7 x
  • Ubuntu firefox 显示在运行无法打开,如何在终端关闭进程

    用top命令找不到firfox的进程 xff0c 查看某个用户运行的进程 xff1a ps u username grep eclipse 查看用户名为 xff1a username 的用户是否运行了eclipse 查看用户当前运行fire
  • 【万字详解】cJSON解析

    目录 1 通过README文件 xff0c 初步了解cJSON xff1a 1 1 头文件的开头和结尾 xff1a 1 2 头文件关于cJSON类型的宏定义 1 3 头文件中的extern 2 阅读并且分析cJSON源码 2 1 结构体st
  • VINS-mono 解析 新特征

    在17 12 29 xff0c VINS更新了代码加入了新的特征 xff0c 包括map merge 地图合并 pose graph reuse 位姿图重利用 online temporal calibration function 在线时
  • VINS-mono 位姿图 重利用测试

    在前一篇博文里介绍了VINS mono pose graph reuse功能的使用 xff0c 这里接着贴出一些延伸的测试 xff0c 并进行一些探讨 延伸测试 一般来说 xff0c 加载地图是进行非GPS定位必要的一步 这里根据新的VIN
  • 2022年全国大学生电子设计大赛省赛A题

    2022年全国大学生电子设计大赛省赛A题 交流电子负载 文章目录 2022年全国大学生电子设计大赛省赛A题 交流电子负载 前言一 总体思路二 模块设计1 半桥模块2 测量模块3 辅助电源模块 三 主电路搭建总结 前言 2022年全国大学生电
  • linux下使用shell发送http请求

    一 curl 1 get请求 curl命令默认下就是使用get方式发送http请求 curl www baidu com 2 post请求 使用 d参数 xff0c 形式如下 xff1a curl d 34 param1 61 value1
  • 网络摄像头 接口协议 ONVIF,PSIA,CGI,ISAPI

    ONVIF致力于通过全球性的开放接口标准来推进网络视频在安防市场的应用 xff0c 这一接口标准将确保不同厂商生产的网络视频产品具有互通性 2008年11月 xff0c 论坛正式发布了ONVIF第一版规范 ONVIF核心规范1 0 随着视频
  • VLC架构及流程分析

    注明 xff1a 此文为转载 原文地址 xff1a https jiya io archives vlc learn 2 html 由于本人之前由于在工作中需要对VLC进行二次开发 因此进行了相关工作的开发 xff08 由于工作原因 目前暂
  • 学习、使用C++开发是不是过时了?

    C 43 43 在开发过程中真心很尴尬 1 拿相同薪水使用不同语言的程序员 xff0c 开发大多数相同的常见业务需求 xff0c C 43 43 总是进度较慢 xff08 不考虑时 空复杂性及效率 xff09 2 扩展性 跨平台 资源 内存
  • strcat()函数的用法

    这几天的一次程序练习中用到了strcat 函数 xff0c 但也想到了一些问题 我们都知道strcat str ptr 是将字符串ptr内容连接到字符串str后 xff0c 然后得到一个组合后的字符串str xff0c 比如 str字符串内
  • libQtCore.so.4 undefined symbol :g_main_context_push_thread_default

    开发板终端执行qt程序 qtDemo qws 报错 xff1a libQtCore so 4 undefined symbol g main context push thread default 解决方案 xff1a cd DVSDK p
  • curl时设置Expect的必要性

    curl 在项目中使用频率较高 xff0c 比如内部接口 第三方 api 图片存储服务等 xff0c 但是我们在使用 curl 时可能并没有注意到 Expect 这个请求头信息 xff0c 而 Expect 设置不正确 xff0c 会导致不
  • 奇偶校验原理

    奇校验 xff1a 求一个字节8位中 1 的个数 xff0c 添加一位校验位 xff0c 使9位中 1 的个数为奇数 xff1b 偶校验同理 奇校验就是让原有数据序列中 xff08 和要加上的一位 xff09 1的个数为奇数 如010001
  • CreateMutex函数函数用来实现进程互斥

    CreateMutex函数 正常情况下 xff0c 一个进程的运行一般是不会影响到其他正在运行的进程的 但是对于某些有特殊要求的如以独占方式使用串行口等硬件设备的程序就要求在其进程运行期间不允许其他试图使用此端口设备的程序运行的 xff0c
  • C++与QML交互总结

    一直对于QT的理解和使用都停留在主窗口程序和控制台程序 xff0c 虽然QT的新东西QML听过也接触过 xff0c 但是基本上没梳理过调用流程 趁着旧项目要使用QML技术 xff0c 现在就将C 43 43 和QML交互进行总结 目录 一
  • QT下TCP协议实现数据网络传输

    QT开发框架以其跨平台的优势 xff0c 在全世界IT界如雷贯耳 其封装了功能齐全的各种类 xff0c 大大的提高了开发者的效率 本篇内容将介绍如何使用QT 6 4 1框架开发服务器和客户端程序 xff0c 让两端能够首发消息 xff0c
  • 从零实现vins-mono+fast-planner+M100无人机实验在现实场景中的应用

    版权声明 本文为博主原创文章 未经博主允许不能随意转载 本文链接 https blog csdn net AnChenliang 1002 article details 109535355 最近由于科研的需要 要将VINS mono与fa
  • Linux下C语言实现HTTP文件服务器和TCP协议实现网络数据传输

    在实际开发中经常用到web框架 xff0c 比如Servlet xff0c SpringBoot等 xff0c 这些开发框架提高了我们的开发效率 xff0c 节省了开发时间 但是这会令我们技术人员处于浮云之上 xff0c 看不到其本质 说实
  • Linux下C语言UDP协议通信实践

    UDP和TCP协议一样 xff0c 都是传输层协议 是无连接的 xff0c 不安全的 xff0c 报式传输层协议 xff0c 通信过程默认也是阻塞的 其通信特点主要如下 xff1a xff08 1 xff09 不需要建立连接 xff0c 所

随机推荐

  • Ubuntu下PyQt5使用总结

    因为工作中需要给交付团队开发桌面工具 xff0c 考虑到交付团队多使用Mac xff0c 调研了一下发现PyQt5可以实现跨平台 xff0c 满足工具开发需要 xff0c 就用其开发了桌面工具 现以ubuntu开发环境为例总结一下开发过程
  • ubuntu下安装配置grpc

    目录 1 准备环境 2 安装protobuf 3 安装cares库 3 安装grpc 1 17 x 1 准备环境 sudo apt get install pkg config sudo apt get install autoconf a
  • cmake管理子程序,lib库和so库应用实践

    cmake在管理大型项目时经常被用到 xff0c 本文以简单程序演示来说明camke管理项目应用 xff0c 其中包括主程序 xff0c 子程序 xff0c so库程序 xff0c lib程序 目录 1 程序目录结构 2 编译执行 3 清除
  • GIt常用命令总结

    目录 1 创建新建分支 2 强制拉去代码 3 合并相邻提交 xff0c 保证只有一个commit信息 4 本地回退 5 查看git修改列表 6 提交代码 7 切换新分支并从服务端拉取最新 8 git cherry pick合并代码使用 9
  • Linux 下I/O多路复用总结

    xfeff xfeff select xff0c poll xff0c epoll都是IO多路复用的机制 I O多路复用就通过一种机制 xff0c 可以监视多个描述符 xff0c 一旦某个描述符就绪 xff08 一般是读就绪或者写就绪 xf
  • WAV文件头分析

    WAV语音文件头部含有44字节的标志信息 xff0c 其含义如下 xff1a ckid xff1a 4字节 RIFF 标志 xff0c 大写 wavHeader 0 61 39 R 39 wavHeader 1 61 39 I 39 wav
  • Linux环境下限制网速和取消限制网速

    查看网卡信息 ip addr root 64 rabbitmq01 ip addr 1 lo lt LOOPBACK UP LOWER UP gt mtu 65536 qdisc noqueue state UNKNOWN qlen 1 l
  • Linux 网络编程2 TCP并发服务器

    Linux 网络编程学习 TCP IP网络编程2 TCP多线程服务器TCP多进程服务器 在前面TCP网络编程代码的基础上进行改造 xff0c 实现并发服务器功能 TCP多线程服务器 实现功能 xff1a server端可以绑定在任意IP端s
  • HTTP Digest authentication

    什么是摘要认证 摘要认证 xff08 Digest authentication xff09 是一个简单的认证机制 xff0c 最初是为HTTP协议开发的 xff0c 因而也常叫做HTTP摘要 xff0c 在RFC2617中描述 其身份验证
  • 简单的netfilter hook函数注册以及内核链表的使用

    include lt linux netfilter h gt include lt linux init h gt include lt linux module h gt include lt linux netfilter ipv4
  • 详述GPS原理及RTK技术应用

    完整的PPT文档在这里 xff1a 详述GPS原理及RTK技术应用 1 GPS概述 1 1定义 全球定位系统GPS xff08 Global Position System xff09 xff0c 全称为NAVSTAR GPS xff08
  • PHP HTTP Digest校验

    PHP作为客户端进行HTTP Digest校验 span class token comment 请求方法 span span class token variable username span span class token oper
  • Http Digest认证协议

    其认证的基本框架为挑战认证的结构 xff0c 如下图所示 xff1a xfeff xfeff 1 客户端希望取到服务器上的某个资源 xff0c 向服务器发送Get请求 2 服务器收到客户端的请求后 xff0c 发现这个资源需要认证信息 xf
  • Postman 安装

    Postman 的下载安装 Postman是一个用于构建和使用API的API平台 xff08 接口的调试工具 xff09 选择对应的系统和版本进行下载 https github com hlmd Postman cn 这里我的电脑是wind
  • 【安卓自定义控件系列】自绘控件打造界面超炫功能超强的圆形进度条

    在前面我们讲过了安卓自定义控件三种方式中的组合控件 xff0c 现在我们来讲解一下通过自绘的方式来实现自定义控件 xff0c 本博客将以自定义圆形进度条为例向大家讲解自定义控件的知识 xff0c 首先来看一下效果图吧 xff0c 这个是本人
  • Linux网络编程3——多进/线程并发服务器

    视频链接 黑马程序员 Linux网络编程 哔哩哔哩 bilibili https www bilibili com video BV1iJ411S7UA p 61 37 目录 一 高并发服务器 1 1 图示 1 2 分类 二 多进程并发服务
  • http请求头和响应头

    文章目录 参考HTTP通用标头Cache ControlConnectionDatePragmaTrailerTransfer EncodingUpgradeViaWarning 请求头AcceptAccept RangesAccept E
  • C++如何使用libcurl发送post请求的三种content-type的封装

    作者 xff1a 虚坏叔叔 博客 xff1a https xuhss com 早餐店不会开到晚上 xff0c 想吃的人早就来了 xff01 x1f604 C 43 43 如何使用libcurl发送post请求的三种content type的
  • 开源四轴飞行器CC3D的稳定模式和PID算法简介

    本文主要介绍一下CC3D的两大飞行模式的原理 xff1a 1 Rate 2 Attitude 以及PID的基本原理 至于AxisLock模式及Manual xff0c 日后续说 笔者是CC3D开源飞控入门玩家 xff0c 遇到过不少磕磕碰碰
  • 了解git分支和版本管理

    0 Git分支和标签的命名规范 1 分支 dev test pre pro 即master 2 标签 Tag格式 xff1a 主版本号 次版本号 修订号 类型标签 xff0c 其中类型标签可为 xff1a alpha beta rc r T