【Git】Git分支与标签掌握这些技巧让你成为合格的码农

🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的专栏《Git》。🎯🎯

👉点击这里,就可以查看我的主页啦!👇👇

Java方文山的个人主页

🎁如果感觉还不错的话请给我点赞吧!🎁🎁

💖期待你的加入,一起学习,一起进步!💖💖

请添加图片描述

一、分支与标签在开发过程中的实际场景

1.1.什么是分支与标签

  1. 分支(Branches)

    • 功能开发:当团队成员需要开发新的功能时,可以创建一个新的功能分支。这个分支可以独立于主开发线,不影响其他开发工作,同时允许团队成员在不干扰主要开发线的情况下进行工作。
    • Bug 修复:如果在主开发线上发现了 Bug,团队可以创建一个专门的修复分支来解决问题,而不必等待当前正在进行的开发完成。
    • 版本发布:在准备发布新版本时,可以为发布创建一个专门的分支。这样团队可以继续在主开发线上进行新功能的开发,同时在发布分支上进行最后的稳定性测试和 bug 修复。
  2. 标签(Tags)

    • 版本发布:当软件达到一个里程碑式的版本,比如一个重要的发布版本或者里程碑版本,团队可以为该版本创建一个标签。这个标签可以被用来标识对应版本的代码状态,方便日后回溯和管理。
    • 重要事件:有些团队会在代码中打标签以标识重要事件,比如重大功能上线、重要的架构调整等,以便日后追踪了解项目发展的历程。

1.2.开发环境分层

  1. 开发(Development)

    • 代表着程序员或开发团队编写、调试和测试新功能或修改现有功能的阶段。
    • 在开发环境中,开发人员可以自由地进行代码编辑、构建和调试,以实现新功能或解决现有问题。
    • 这个阶段通常是代码变动最频繁、灵活度要求最高的阶段。
  2. 测试(Testing)

    • 代表着对开发完成的功能、模块或整体系统进行各种测试,包括单元测试、集成测试、验收测试等。
    • 在测试环境中,测试人员或自动化测试工具会对软件进行严格的测试以确保其功能的正确性、性能的稳定性等。
    • 这个阶段的重点是验证软件的质量,发现并修复潜在的缺陷。
  3. 演示(Staging)

    • 代表着将已经通过开发和测试的功能部署到一个类似生产环境的环境中进行最终的集成测试和验证。
    • 在演示环境中,通常会模拟真实的生产环境配置,包括数据库、缓存、消息队列等,以确保软件能够正常运行并与其他系统协作。
    • 这个阶段的目标是确保部署到生产环境之前的系统稳定性和一致性。
  4. 生产(Production)

    • 代表着最终用户会接触到的实际运行环境,软件在这里提供服务并处理真实的数据和用户请求。
    • 在生产环境中,软件需要保持高可用性、高性能和安全性,并且通常需要与监控系统结合以及随时准备应对故障。
    • 这个阶段的关注点是确保系统可靠地为最终用户提供服务,并及时响应和处理各种异常情况。

1.3.分支与标签的关系

  • "dev"阶段对应"alpha"状态,表示正在开发阶段的软件版本。
  • "test"阶段对应"beta"状态,表示正在测试阶段的软件版本。
  • "pre"阶段对应"rc"状态,表示预发布或者灰度测试阶段的软件版本。
  • "pro"阶段对应"r"状态,表示正式发布或者生产环境中的软件版本。

在标签后缀中标明状态有以下几个好处

  1. 清晰的版本状态识别:通过在标签后缀中标明状态,可以清晰地识别出当前版本处于哪个阶段,包括开发、测试、预发布和生产等状态。这有助于团队成员和其他相关人员快速理解当前版本所处的位置,以及该版本适合在何种环境中使用。

  2. 方便的版本管理:带有状态后缀的标签能够方便地进行版本管理。开发团队可以根据不同状态的标签快速定位到相应阶段的版本,并且能够在不同环境中进行相应版本的部署和测试,从而提高版本管理的效率。

  3. 统一的命名规范:通过在标签后缀中标明状态,可以建立统一的命名规范,使得团队内部对于各个阶段版本的命名统一,降低了沟通成本和误解的可能性。

  4. 便于追溯历史记录:在项目历史记录中,带有状态后缀的标签可以帮助开发人员更容易地追溯到不同阶段的版本。这对于查找特定阶段的代码状态或者回溯历史版本是非常有帮助的。

  5. 支持并行开发和发布:通过标签后缀标明状态,不同状态的版本可以并行存在,并且能够清晰地区分开来。这有助于支持团队在不同阶段进行并行开发和发布,提高了团队的灵活性和效率。

二、Git分支的讲解

2.1.GitBashHere操作分支

查看分支

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

可以看到我们除了默认的master并无其他分支

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

 Git分支的命名规范dev/test/pre/pro(即master)

切换分支git checkout name

创建+切换分支git checkout -b name

合并某分支到当前分支 git merge name

我先在dev提交五个文件后再到test合并

分支提交远程git push origin name

删除分支(先删除本地才能删除远程,删除本地需要先切其他分支

git branch -d name              //删除本地分支
git push origin --delete dev   //删除远程分支

 

2.2.IDEA中操作分支

右键git工程,进入git,选择Branches

选择要切换的分支 

当前的分支是master,我新建一个dev2并切换

选中要切换的分支,checkout确定

当前所处的就是dev2分支了

但是 “Remote Branches” 下依然只有一个 master 分支,表明在我们的远程仓库依然只有一个master 分支,因此我们还需要把在本地仓库新建的分支推送到远程仓库中,这样就可以在远程仓库中看到新建的分支了。

单击dev2 ,然后在左边单击 “Push” ,弹出推送对话框。单击 “Push” 推送到远程仓库,这样分支新建操作彻底完成,可以看到在"Remote Branches"分支下面出现了“dev2 ”,我们可以在该分支进行编码并进行拉取和推送操作。

如果删除分支之前,建议先切换到(Checkout)其他分支,例如,Checkout到master分支,当然这并不强制,只是为了方便删除分支而已

三、Git标签的讲解

3.1.GitBashHere操作标签

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

查看所有标签git tag

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

创建tag

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

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

推送标签到远程git push origin

删除tag

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除
         git tag -d 1.0.0-alpha
然后,再从远程删除。删除命令也是push,但是格式如下:
         git push origin :refs/tags/1.0.0-alpha

3.2. IDEA中操作标签

idea创建tag

可以右键项目,然后按照 Git -> Repository -> Tag... 创建tag。

或 顶部菜单栏 按照 VCS -> Git-> Tag... 创建tag。

推送远程分支

push的时候特别注意打勾即可

查看某个tag版本只需要切换版本即可

这时候IDEA就会切换代码了

对之前的代码提交版本打tag

四、拓展--实战分支与标签

以下是用代码来演示整个过程(还需大家仔细区分)

   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
   
   4.将dev合并到test,并提交
     git checkout test
     git merge dev
     git push origin qas

   5.测试结束之后,创建标签:qas-1.0.0
     git tag qas-1.0.0
     
   6.将qas合并到pre
     git checkout pre
     git merge qas
     git tag pre-1.0.0

   7.将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

 请添加图片描述

到这里我的分享就结束了,欢迎到评论区探讨交流!!

💖如果觉得有用的话还请点个赞吧 💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/133222.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt——连接mysql增删查改(仓库管理极简版)

目录 UI布局设计 .pro文件 mainwindow.h main.cpp UI布局设计 .pro文件 QT core gui QT core gui sql QT sqlgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any …

【算法-链表4】环形链表2的两种解法

今天&#xff0c;带来链表相关算法的讲解。文中不足错漏之处望请斧正&#xff01; 理论基础点这里 环形链表 1. 思路 利用链表相交 我们在环内任意一处断开&#xff0c;然后判断断开处的下一个位置和head是否相交&#xff0c;如果相交&#xff0c;相交处就是环口。 公式法 …

ArcGIS10.8 连接 PostgreSQL 及遇到的两个问题

前提 以前同事用过我的电脑连PostgreSQL&#xff0c;失败了。当时不知道原因&#xff0c;只能使用GeoServer来发布数据了。现在终于搞明白了&#xff0c;原因是ArcGIS10.2版本太老&#xff0c;无法连接PostgreSQL9.4。参考这里 为了适应时代的发展&#xff0c;那我就用新的Ar…

Spark的转换算子和操作算子

1 Transformation转换算子 1.1 Value类型 1&#xff09;创建包名&#xff1a;com.shangjack.value 1.1.1 map()映射 参数f是一个函数可以写作匿名子类&#xff0c;它可以接收一个参数。当某个RDD执行map方法时&#xff0c;会遍历该RDD中的每一个数据项&#xff0c;并依次应用f函…

python Flask框架,调用MobileNetV2图像分类模型,实现前端上传图像分类

python Flask框架&#xff0c;调用MobileNetV2图像分类模型&#xff0c;实现前端上传图像分类 今天博主介绍一个图像分类的小项目 基于flask 和mobileNetV2模型的前端图像分类项目 环境配置如下&#xff1a; python版本3.7.6 安装库的版本如下&#xff1a; tensorflow 2.11.…

LabVIEW中NIGPIB设备与驱动程序不相关的MAX报错

LabVIEW中NIGPIB设备与驱动程序不相关的MAX报错 当插入GPIB-USB设备时&#xff0c;看到了NI MAX中列出该设备&#xff0c;但却显示了黄色警告指示&#xff0c;并且指出Windows没有与您的设备相关的驱动程序。 解决方案 需要安装能兼容的NI-488.2驱动程序。 通过交叉参考以下有…

STM32--时钟树

一、什么是时钟&#xff1f; 时钟是单片机的脉搏&#xff0c;是系统工作的同步节拍。单片机上至CPU&#xff0c;下至总线外设&#xff0c;它们工作时序的配合&#xff0c;都需要一个同步的时钟信号来统一指挥。时钟信号是周期性的脉冲信号。 二、什么是时钟树&#xff1f; S…

“Git实践指南:深入探索开发测试上线、分支管理与标签“

文章目录 引言一、Git的分支的使用1.分支2.标签3.分支与标签的关系4. 分支在实际中的作用5. 四个环境以及各自的功能特点6. 分支策略分支应用场景 二、Git的标签3.1 标签的基本使用3.3 标签的共享与推送 总结 引言 在现代软件开发中&#xff0c;版本控制是一个关键的环节&…

2023年【危险化学品经营单位主要负责人】免费试题及危险化学品经营单位主要负责人证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年危险化学品经营单位主要负责人免费试题为正在备考危险化学品经营单位主要负责人操作证的学员准备的理论考试专题&#xff0c;每个月更新的危险化学品经营单位主要负责人证考试祝您顺利通过危险化学品经营单位主…

【扩散模型】万字长文全面理解与应用Stable Diffusion

万字长文全面理解与应用Stable Diffusion 1. Stable Diffusion简介1.1 基本概念1.2 主体结构1.3 训练细节1.4 模型评测1.5 模型应用1.6 模型版本1.7 其他类型的条件生成模型1.8 使用DreamBooth进行微调 2. 实战Stable Diffusion2.1 环境准备2.2 从文本生成图像2.3 Stable Diffu…

LIBGDX实时绘制字符、实时绘制中文

LIBGDX实时绘制字符、实时绘制中文 转自&#xff1a;https://lingkang.top/archives/libgdx-shi-shi-hui-zhi-zi-fu 注意&#xff0c;相比于贴图字体&#xff0c;实时绘制会有一定的失真、模糊 Maven项目依赖&#xff1a; <properties><maven.compiler.source>…

抢量双11!抖音商城「官方立减」 缘何成为“爆单神器”?

10月20日抖音商城双11好物节正式开跑&#xff0c;仅仅三天&#xff0c;抖音商城整体GMV对比去年同期提升了200%&#xff0c;而在开跑一周后&#xff0c;一些品牌的销售额已经超过了今年整个618&#xff0c;可谓增势迅猛。其中&#xff0c;平台官方特别推出的「官方立减」玩法&a…

基于51单片机的篮球比赛计分器积分器

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;单片机篮球 获取完整源程序仿真源文件原理图文件论文报告等 基于51单片机的篮球计分器 由STC89C51单片机数码管显示模块按键模块电源模块构成 具体功能&#xff1a; &#xff08;1&#xff09;能记录单节比赛的比赛时间&am…

ETW HOOK原理探析

ETW HOOK研究 文章目录 ETW HOOK研究前言原理探究内核开启ETW日志HOOK ETW修改ETW日志上下文代理GetCpuClock函数寻找SSDT和SSDT Shadow 总结参考 前言 关于ETW是什么我就不多说了&#xff0c;可以通过微软的相关文档了解到。据网上得知这项技术最早被披露于2345的驱动中&…

【字符串】【双指针翻转字符串+快慢指针】Leetcode 151 反转字符串中单词【好】

【字符串】【双指针翻转字符串快慢指针】Leetcode 151 反转字符串中单词 解法1 双指针翻转字符串快慢指针更新数组大小 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- ---------------&#x1f388;&#x1f388;解答链接…

UI自动化测试 | Jenkins配置优化

前一段时间帮助团队搭建了UI自动化环境&#xff0c;这里将Jenkins环境的一些配置分享给大家。 背景&#xff1a; 团队下半年的目标之一是实现自动化测试&#xff0c;这里要吐槽一下&#xff0c;之前开发的测试平台了&#xff0c;最初的目的是用来做接口自动化测试和性能测试&…

MySQL 数据库查询与数据操作:使用 ORDER BY 排序和 DELETE 删除记录

使用 ORDER BY 进行排序 使用 ORDER BY 语句按升序或降序对结果进行排序。 ORDER BY 关键字默认按升序排序。要按降序排序结果&#xff0c;使用 DESC 关键字。 示例按名称按字母顺序排序结果&#xff1a; import mysql.connectormydb mysql.connector.connect(host"l…

Linux 内核定时器

一个人总要走陌生的路&#xff0c;看陌生的风景&#xff0c;听陌生的歌&#xff0c;然后在某个不经意的瞬间&#xff0c;你会发现&#xff0c;原本费尽心机想要忘记的事情真的就这么忘记了。 ----小新 一、引言 Linux内核定时器是一种用于在特定时间间隔后触发特定事件的重要组…

数据结构之AVL树

map/multimap/set/multiset这几个容器有个共同点是: 其底层都是按照二叉搜索树来实现的,但是普通的二叉搜索树有其自身的缺陷, 假如往树中插入的元素有序或者接近有序, 二叉搜索树就会退化成单支树, 时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了…

JavaScript基础入门04

目录 1.WebAPI 背景知识 1.1什么是 WebAPI 1.2什么是 API 2.DOM 基本概念 2.1什么是 DOM 2.2DOM 树 3.获取元素 3.1querySelector 3.2querySelectorAll 4.事件初识 4.1基本概念 4.2事件三要素 4.3简单示例 5.操作元素 5.1获取/修改元素内容 5.2获取/修改元素属性…