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

news2025/1/15 20:03:14

🎉🎉欢迎来到我的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.coloradmin.cn/o/1197779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

src/main/resources/fonts/songti.ttc not found as file or resource.

https://blog.csdn.net/Lewishhhh/article/details/122812272文章浏览阅读4.8k次&#xff0c;点赞2次&#xff0c;收藏7次。背景遇到个需求需要用Java导出PDF文件&#xff0c;权衡之下选择了iText&#xff0c;Java操作pdf的各个开源库之间的对比可以参考https://blog.csdn.net/…

论文笔记:AttnMove: History Enhanced Trajectory Recovery via AttentionalNetwork

AAAI 2021 1 intro 1.1 背景 将用户稀疏的轨迹数据恢复至细粒度的轨迹数据是十分重要的恢复稀疏轨迹数据至细粒度轨迹数据是非常困难的 已观察到的用户位置数据十分稀疏&#xff0c;使得未观察到的用户位置存在较多的不确定性真实数据中存在大量噪声&#xff0c;如何有效的挖…

大数据毕业设计选题推荐-生产大数据平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Centos7安装PostgreSQL 14

环境&#xff1a; Centos7安装PostgreSQL_14版本数据库&#xff1b; 打开官方网站&#xff1a;PostgreSQL: Linux downloads (Red Hat family) 一、 版本选择 复制、粘贴并运行如下脚本&#xff1a; 二、安装步骤 这些命令是在 CentOS 7.x 系统上安装和配置 PostgreSQL 14 的步…

【机器学习范式】监督学习,无监督学习,强化学习, 半监督学习,自监督学习,迁移学习,对比分析+详解与示例代码

目录 1. 监督学习 (Supervised Learning): 2. 无监督学习 (Unsupervised Learning): 3. 强化学习 (Reinforcement Learning): 4. 半监督学习 (Semi-Supervised Learning): 5. 自监督学习 (Self-Supervised Learning): 6. 迁移学习 (Transfer Learning): 7 机器学习范式应…

Java编程--synchronized/死锁/可重入锁/内存可见性问题/wait()、notify()

前言 逆水行舟&#xff0c;不进则退&#xff01;&#xff01;&#xff01; 目录 线程安全 synchronized原子锁 可重入锁&#xff08;递归锁&#xff09; 死锁 内存可见性问题 wait()、notify() 线程安全 线程安全是指在多线程环境下&#xff0c;程序的行为表现仍然符合我…

华为ensp:静态默认路由

静态路由 到r2 上的系统视图模式 下一跳为1.1.1.2 ip route-static 192.168.2.0 255.255.255.0 1.1.1.2 如果找2网段下一跳为1.1.1.2接口 默认路由 到r3上做的是默认路由 ip route-static 0.0.0.0 0 1.1.1.1 所有的流量去找1.1.1.1 查看效果 只要做完完整的路由就可…

HIKVISION流媒体管理服务器后台任意文件读取漏洞

默认账号密码为 admin/12345 构造payload /systemLog/downFile.php?fileName../../../../../../../../../../../../../../../windows/system.ini漏洞证明 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于传播…

无需标注海量数据,目标检测新范式OVD

当前大火的多模态GPT-4在视觉能力上只具备目标识别的能力&#xff0c;还无法完成更高难度的目标检测任务。而识别出图像或视频中物体的类别、位置和大小信息&#xff0c;是现实生产中众多人工智能应用的关键&#xff0c;例如自动驾驶中的行人车辆识别、安防监控应用中的人脸锁定…

若依如何进行页面路由跳转,路由跳转时如何携带参数(超详细图文教程)

我们经常会有这样需求&#xff0c;当我们在一个页面时&#xff0c;想要跳转到另一个页面&#xff0c;但是跳转的同时还需要携带参数。那么这种情况在若依系统中该如何做呢&#xff0c;下面我们来说一下。 文章目录 问题提出&#xff1a;一、创建目标页面的路由(也就是图2的路由…

C语言--有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

一.解体思路 设一个结构体数组&#xff0c;数组中包含3个元素; 每个元素中的信息应包括候选人的姓名和得票数;输入被选人的姓名&#xff0c;然后与数组元素中的“姓名”成员比较&#xff0c;如果相同&#xff0c;就给这个元素中的“得票数”成 员的值加1;输出所有元素的信息。 …

win下安卓打包指南

win下安卓打包指南 0、缘起 换了台电脑竟然忘了怎么打包&#xff0c;还好有笔记&#xff0c;用软件打包也挺好&#xff0c;但是我感觉用 命令行 更有操作感&#xff0c;分享下。 1、下载并配置apktool&#xff08;放在C://Windows无需配置环境变量&#xff0c;需要java环境&…

【算法练习Day45】最长公共子序列不相交的线最大子数组和

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 最长公共子序列不相交的线最…

Linux输入与输出设备的管理

计算机系统中CPU 并不直接和设备打交道&#xff0c;它们中间有一个叫作设备控制器&#xff08;Device Control Unit&#xff09;的组件&#xff0c;例如硬盘有磁盘控制器、USB 有 USB 控制器、显示器有视频控制器等。这些控制器就像代理商一样&#xff0c;它们知道如何应对硬盘…

如何在 Windows 11 上恢复丢失的文件?(4种方法)

在 Windows 11 设备上丢失重要文件感觉就像一场噩梦。这是您希望时光倒流并撤消意外删除或避免那些意外的系统故障的时刻之一。这种情况带来的挫败感和焦虑感简直难以承受。但是&#xff0c;嘿&#xff0c;不要绝望&#xff01;我们随时为您提供帮助。 在这本真诚的指南中&…

CA 陪你看 Ignite | 聚焦 Microsoft Ignite 2023

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 微软 Reactor 为帮助广开发者&#xff0c;技术爱好者&#xff0c;更好的学习 .NET Core, C#, Python&#xff0c;数据科学&#xff0c;机器学习&#xff0c;AI&#xff0c;区块链, IoT 等技术&#xff0…

android studio 修改图标

Android Studio 修改图标 简介 Android Studio 是一款由谷歌推出的用于开发 Android 应用程序的集成开发环境&#xff08;IDE&#xff09;。在开发过程中&#xff0c;我们可以根据自己的需求修改 Android Studio 的图标&#xff0c;以个性化我们的开发环境。 本文将介绍如何在…

XC1010非隔离型、低成本的PWM功率开关、AC-DC 220V转5V 200mA小电流芯片

XC1010是一款非隔离型、高集成度且低成本的PWM功率开关&#xff0c;适用于降压型和升降压型电路。 XC1010采用高压单晶圆工艺&#xff0c;在同一片晶圆上集成有 500V 高压 MOSFET 和采用开关式峰值电流模式控制的控制器。在全电压输入的范围内可以保证高精度的 5V 默认…

LoRAShear:微软在LLM修剪和知识恢复方面的最新研究

LoRAShear是微软为优化语言模型模型(llm)和保存知识而开发的一种新方法。它可以进行结构性修剪&#xff0c;减少计算需求并提高效率。 LHSPG技术&#xff08; Lora Half-Space Projected Gradient&#xff09;支持渐进式结构化剪枝和动态知识恢复。可以通过依赖图分析和稀疏度…

【3】Gradle-快速入门使用【Gradle概念】

目录 【3】Gradle-快速入门使用【Gradle概念】Gradle任务查看可用任务了解任务探索任务依赖性 依赖关系了解传递依赖关系查看项目依赖项添加版本目录 【可选】 插件使用插件查看插件提供的任务配置插件 增量构建启用缓存使用构建缓存步骤总结 个人主页: 【⭐️个人主页】 需要您…