【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

 请添加图片描述

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue Sts认证后直传图片到阿里云OSS

后端进行sts认证生成临时身份凭证&#xff0c;前端通过凭证直传图片等文件到OSS中 一 OSS配置 增加用户和角色&#xff0c;创建OSS bucket 1.1 添加用户 登录阿里云管理控制台&#xff0c;右侧头像&#xff0c;进入访问控制 点击左侧导航栏的身份管理的用户&#xff0c;点击…

MySQL的索引和复合索引

由于MySQL自动将主键加入到二级索引&#xff08;自行建立的index&#xff09;里&#xff0c;所以当select的是主键或二级索引就会很快&#xff0c;select *就会慢。因为有些列是没在索引里的 假设CA有1kw人咋整&#xff0c;那我这个索引只起了前一半作用。 所以用复合索引&am…

探索微信小程序框架的精华——高质量的优秀选择

目录 引言&#xff1a; 1. 框架性能 2. 开发者工具支持 3. 文档和社区支持 4. 扩展能力 5. 使用率和稳定性 结语&#xff1a; 引言&#xff1a; 微信小程序作为一种轻量级、高效便捷的应用形式&#xff0c;已经在移动应用领域占据了重要地位。而其中&#xff0c;选择一个…

【EI会议征稿】JPCS独立出版-第五届新材料与清洁能源国际学术会议(ICAMCE 2024)

JPCS独立出版-第五届新材料与清洁能源国际学术会议&#xff08;ICAMCE 2024&#xff09; 2024 5th International Conference on Advanced Material and Clean Energy 第五届新材料与清洁能源国际学术会议&#xff08;ICAMCE 2024&#xff09;将于2024年2月23-25日在中国▪长沙…

【论文阅读】多模态NeRF:Cross-Spectral Neural Radiance Fields

https://cvlab-unibo.github.io/xnerf-web intro 从不同的light spectrum sensitivity获取信息&#xff0c;同时需要obtain a unified Cross-Spectral scene representation – allowing for querying, for any single point, any of the information sensed across spectra。…

xcode SDK does not contain ‘libarclite‘

SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a; try increasing the minimum deployment target解决方法 iOS13以上

macOS Sonoma 14.2beta2(23C5041e)发布(附黑白苹果镜像地址)

系统介绍 黑果魏叔11 月 10 日消息&#xff0c;今日向 Mac 电脑用户推送了 macOS 14.2 开发者预览版 Beta 2 更新&#xff08;内部版本号&#xff1a;23C5041e&#xff09;&#xff0c;本次更新距离上次发布隔了 14 天。 macOS Sonoma 14.2 添加了 Music 收藏夹播放列表&…

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

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

11 抽象向量空间

抽象向量空间 向量是什么函数什么是线性推论向量空间 这是关于3Blue1Brown "线性代数的本质"的学习笔记。 向量是什么 可以是一个箭头&#xff0c;可以是一组实数&#xff0c;即一个坐标对。 箭头在高维&#xff08;4维&#xff0c;甚至更高&#xff09;空间&…

云效流水线docker部署 :node.js镜像部署VUE项目

文章目录 引言I 流水线配置1.1 项目dockerfile1.2 Node.js 镜像构建1.3 docker 部署引言 云效流水线配置实现docker 部署微服务项目:https://blog.csdn.net/z929118967/article/details/133687120?spm=1001.2014.3001.5501 配置dockerfile-> 镜像构建->docker部署。 …

电脑怎么录制视频,录制的视频怎么剪辑?

在现今数字化的时代&#xff0c;视频成为了人们日常生活中不可或缺的一部分。因此&#xff0c;对于一些需要制作视频教程、录制游戏或者是进行视频演示的人来说&#xff0c;电脑录屏已经成为了一个必不可少的工具。那么&#xff0c;对于这些人来说&#xff0c;如何选择一个好用…

C语言 每日一题 PTA 11.7 day13

1.求e的近似值 自然常数 e 可以用级数 1 1 / 1! 1 / 2! ⋯ 1 / n! ⋯ 来近似计算。 本题要求对给定的非负整数 n&#xff0c;求该级数的前 n 1 项和。 代码实现 #include<stdio.h> void main() {int a, i, j; double b 1; double c 1;printf("请输入一个数\n…

计算机网络第4章-通用转发和SDN

引子&#xff1a; 在前面&#xff0c;我们将基于目的地转发的特征总结为两个步骤&#xff1a; 查找目的IP地址&#xff08;匹配&#xff09;&#xff0c;然后将分组发送到有特定输出端口的交换结构&#xff08;“动作”&#xff09;。 但是这种转发特征会带来许多问题&#…

Redis的内存淘汰策略分析

概念 LRU 是按访问时间排序&#xff0c;发生淘汰的时候&#xff0c;把访问时间最久的淘汰掉。LFU 是按频次排序&#xff0c;一个数据被访问过&#xff0c;把它的频次 1&#xff0c;发生淘汰的时候&#xff0c;把频次低的淘汰掉。 几种LRU策略 以下集中LRU测率网上有很多&am…

使用电脑时提示msvcp140.dll丢失的5个解决方法

“计算机中msvcp140.dll丢失的5个解决方法”。在我们日常使用电脑的过程中&#xff0c;有时会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。那么&#xff0c;什么是msvcp140.dll呢&#xff1f;它的作用是什么&#xff1f;丢失它会对电脑产生什么影响呢&…

【uniapp】签名组件,兼容vue2vue3

网上找了个源码改吧改吧&#xff0c;清除了没用的功能和兼容性&#xff0c;基于uniapp开发的 样子 vue2 使用方法&#xff0c;具体的可以根据业务自行修改 <signature ref"signature" width"100%" height"410rpx"></signature>confi…

【数据结构】C语言实现单链表万字详解(附完整运行代码)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 一.了解项目功能 在本次项目中我们的目标是实现一个单链表: 该单链表使用动态内存分配空间,可以用来存储任意数量的同类型数据. 单链表结点(Node)需要包含两个要素:数据域data…

Leetcode2834. 找出美丽数组的最小和

Every day a Leetcode 题目来源&#xff1a;2834. 找出美丽数组的最小和 解法1&#xff1a;贪心 从最小正整数 1 开始枚举&#xff0c;设当前数为 num&#xff0c;如果 nums 里没有 target - num&#xff0c;就说明可以添加 num&#xff0c;依次填满直到有 n 个数即可。 用…

【云栖2023】张治国:MaxCompute架构升级及开放性解读

简介&#xff1a; 本文根据2023云栖大会演讲实录整理而成&#xff0c;演讲信息如下 演讲人&#xff1a;张治国|阿里云智能计算平台研究员、阿里云MaxCompute负责人 演讲主题&#xff1a;MaxCompute架构升级及开放性解读 活动&#xff1a;2023云栖大会 MaxCompute发展经历了…

“目标值排列匹配“和“背包组合问题“的区别和leetcode例题详解

1 目标值排列匹配 1.1 从目标字符串的角度来看&#xff0c;LC139是一个排列问题&#xff0c;因为最终目标子串的各个字符的顺序是固定的&#xff1f; 当我们从目标字符串 s 的角度来看 LC139 “单词拆分” 问题&#xff0c;确实可以认为它涉及到排列的概念&#xff0c;但这种…