Git分支与Git标签的介绍及其场景应用

news2024/11/16 11:31:49

目录

一、Git分支

1.1 定义

1.2 基本概念

1.3 特点与优势

1.4 Git分支操作命令

1.4.1 查看分支

1.4.2 创建分支

1.4.3 删除分支

1.4.4 切换分支

1.4.5 创建并切换到新建分支

1.5 场景应用

1.5.1 前期准备

1.5.2 具体操作

二、Git标签

2.1 定义

2.2 类型

2.3 标签命令

2.3.1 创建标签

2.3.2 查看标签

2.3.3 进入标签(切换到标签所指向的提交):

2.3.4上传标签(推送标签到远程仓库)

2.3.5 删除标签 

2.4 标签规范

2.5 场景应用

三、收获

 


一、Git分支

1.1 定义

  • 在Git中,分支(Branch)是一种用来表示项目工作进程的引用,它指向某次提交(commit),并且包含了该提交及其所有父提交的快照。
  • 分支的存在使得可以在同一代码库中同时进行多个不同的工作,而不会相互影响。每个分支都代表了项目的一个独立线条,开发者可以在不同的分支上进行独立的开发、测试和实验。

1.2 基本概念

以下是一些关于Git分支的基本概念:

1. 主分支(Master/Main):

  • 主分支通常是项目的主要分支,包含了稳定和可发布的代码。
  • 在一些新的项目中,可能使用"main"作为主分支的名称,而在传统项目中,使用"master"作为主分支名称。

2. 创建分支:

  • 使用 git branch 命令可以创建一个新的分支。例如,git branch feature-branch 会创建名为 "feature-branch" 的新分支,但并不会切换到该分支。

3. 切换分支:

  • 使用 git checkout 或者 git switch 命令可以切换到其他分支。例如,git switch feature-branch 将切换到名为 "feature-branch" 的分支。

4. 创建并切换分支:

  • 使用 git checkout -b 或者 git switch -c 命令可以创建并切换到新的分支。例如,git checkout -b new-feature 将创建并切换到名为 "new-feature" 的分支。

5. 查看分支:

  • 使用 git branch 命令可以列出所有本地分支,而 git branch -r 可以列出所有远程分支。

6. 合并分支:

  • 使用 git merge 命令可以将一个分支的更改合并到另一个分支。例如,从主分支合并到特性分支:先切换到特性分支,然后运行 git merge master

7. 删除分支:

  • 使用 git branch -d 命令可以删除已经合并的分支,而 git branch -D 可以强制删除未合并的分支。

8. 远程分支:

  • 远程分支是存在于远程仓库的分支。可以使用 git fetch 更新远程分支信息,然后使用 git checkout 或者 git merge 切换到或合并远程分支。

9. 推送分支:

  • 使用 git push 命令可以将本地分支推送到远程仓库。例如,git push origin feature-branch 将本地的 "feature-branch" 推送到远程仓库的同名分支。

10. 拉取分支:

  • 使用 git pull 命令可以从远程仓库拉取分支并合并到当前分支。

1.3 特点与优势

Git分支具有许多特点和优势,使得它成为版本控制系统中强大而灵活的工具。以下是Git分支的一些主要特点和优势:

  1. 并行开发:

    • 分支允许开发者同时处理多个任务,每个任务都可以在独立的分支上进行。这使得团队能够并行开发不同的功能、修复不同的bug,而不会互相干扰。
  2. 独立实验:

    • 可以创建一个新的分支来尝试新的想法或实验性的开发,而不会影响主干代码。如果实验成功,可以将分支合并回主干;如果失败,可以轻松地放弃分支。
  3. 任务隔离:

    • 每个分支都代表一个独立的工作线条,因此可以在不同的分支上进行不同任务的开发,而不必担心它们之间的冲突。这提高了代码的可维护性和开发效率。
  4. 快速切换:

    • 可以轻松地在不同的分支之间切换,使得开发者能够灵活地切换到不同的工作上下文。这是通过使用 git checkout 或 git switch 命令实现的。
  5. 版本历史清晰:

    • 分支的使用可以使版本历史变得更加清晰。每个分支都有自己的提交历史,合并时也会保留有关分支的信息,使得项目的演进更易于理解。
  6. 风险分散:

    • 在主分支上进行重大更改可能会带来一些风险,但使用分支可以将这些更改隔离在一个单独的分支上,直到它们经过充分测试并准备好合并。
  7. 团队协作:

    • 团队成员可以在各自的分支上进行独立的工作,然后定期将其更改合并到主分支。这种方式有助于减少合并冲突,并促进团队协作。
  8. 临时修复:

    • 可以创建一个临时的分支来修复紧急的bug,而不必影响正在进行的其他开发工作。修复完成后,可以将该分支合并回主分支。

1.4 Git分支操作命令

 Gitee新建仓库:

初始化readme文件:

复制SSH地址:

打开Git Bash进行克隆:

1.4.1 查看分支

命令如下:

git branch

1.4.2 创建分支

git branch 分支名

1.4.3 删除分支

git branch -d 分支名

注:在当前分支下不能删除当前分支 

1.4.4 切换分支

git checkout 分支名

当然,切换分支跟删除分支可以联立起来一起使用,即没有当前分支的情况下切换到新建的分支。

1.4.5 创建并切换到新建分支

git checkout -b 分支名

1.5 场景应用

案例假想:

人员:

  • 开发人员
  • 测试人员

场景:

  • 假设在正式环境下,开发人员在正式环境开发了十个功能模块(此处我们用十个java文件来进行模拟),但是实际上只有六个模块功能能够正常使用,而剩余的其他四个模块功能有问题,不能正常使用。那么此时开发人员开发的十个模块因为只有六个能用,所以将这六个模块打包进行测试(这里即交给Git进行管理)。

1.5.1 前期准备

在项目目录下新建十个文件,代表上述所说的十个功能模块,如下:

1.5.2 具体操作

Person1-6是没有问题的模块,7-10是有问题的模块。即:

使用gui打开图形操作界面,右键点击Git GUI 。点击文件图标,将前六个模块交给Git管理:

因Person1-6功能无问题,将Person1-6提交到测试环境中进行测试,

输入命令 git commit -am "六个模块功能完成,加入测试环境进行测试",如下

 提交完之后,开发环境中,就只能看到剩余未提交的有功能性问题的模块了,如下:

之后,我们进入到测试环境中,在本地的文件夹中是看不到在测试环境中的文件的,

输入命令进入测试环境 :  git checkout ceshi

更换到测试环境后(此时测试环境上是没有任何代码的),如下:

  • 那么这里可能有人就要问了,为什么在测试环境下,本地资源文件看到的却是开发人员未提交的有问题的功能模块呢?

因为这四个有问题的功能模块是未暂存的,不属于任何分支。

那么测试人员要想测试,就必须先将开发分支上的代码合并到测试分支上去,才能进行测试,输入命令:git merge kaifa , 如下:

 

测试完成后,我们进入到开发环境中,将开发环境作为一个分支上传到远程仓库中,

命令 :  git checkout kaifa   ( 进入开发环境 )

命令 :  git push origin kaifa  ( 将开发环境作为一个分支上传到远程仓库中 )

具体操作如下:

然后我们再进入到测试环境中,将测试环境作为一个分支上传到远程仓库中,

命令 :  git checkout ceshi( 进入测试环境 )

命令 :  git push origin ceshi( 将测试环境作为一个分支上传到远程仓库中 )

具体操作如下:

上传后,在远程仓库中的这个分支里,就可以看到当时测试环境的所有模块及代码和文件。

二、Git标签

2.1 定义

在Git中,标签(Tag)是用于标记特定提交的引用。它是一个指向某个特定提交的不可变的引用,通常用于标识版本发布或其他重要的里程碑。与分支不同,标签通常不会移动,因此它是一个静态的指针,永远指向特定的提交。

2.2 类型

标签在Git中有两种主要类型:

  • 轻量标签(Lightweight Tag)
  • 附注标签(Annotated Tag)

2.3 标签命令

2.3.1 创建标签

git tag   <tag_name>      # 创建一个轻量标签,标签名称 : <tag_name>
git tag -a  <tag_name>  -m "tag message"   #创建一个带注释的标签

2.3.2 查看标签

git tag        # 列出所有标签

2.3.3 进入标签(切换到标签所指向的提交):

git checkout <tag_name>      # 切换到名为<tag_name>的标签所指向的提交

2.3.4上传标签(推送标签到远程仓库)

git push origin  <tag_name>     # 将名为<tag_name>的标签推送到远程仓库
git push --tags                           # 将所有本地标签推送到远程仓库

2.3.5 删除标签 

git tag -d <tag_name>    # 将名为<tag_name>的标签删除

git push origin :refs/tags/<tag_name>    # 将在远程仓库名为<tag_name>的标签删除

2.4 标签规范

在 Git 中,标签的命名规范可以根据个人或团队的习惯来制定,但是一般来说,建议遵循以下规范:

  • 标签名应该简短、有意义,并且能够清晰地表达该标签所代表的含义。
  • 标签名应该使用英文单词,可以包含数字和连字符(-),但是不要包含空格或其他特殊字符。
  • 如果要创建一个版本号标签,建议使用语义化版本号(Semantic Versioning,简称 SemVer)规范,格式为 `v1.0.0.20231111`,其中 v1表示主版本号,第一个0表示次版本号,第二个0表示修订号,20231111表示日期。
  • 如果要创建一个带注释的标签,建议在注释中包含该标签的详细信息,例如该版本的功能特性、修复的 bug、重要的变更等。

 补充:

语义化版本号后可以再加个.xxx后缀,如后缀为 :

  • .alpha 表示开发环境
  • .beta 表示测试环境
  • .rc  表示灰度环境
  •  .r  表示生成环境

这些规范旨在提高标签的可读性和管理性,确保团队成员能够轻松地理解标签的目的和含义。选择适合项目需求的标签规范,并在整个团队中强调一致性,有助于更好地组织和维护版本信息。

2.5 场景应用

进入开发环境(kaifa),创建一个相对开发环境的标签,并且上传到自己的远程仓库,命令如下:

命令 :  git checkout kaifa( 进入开发环境 )

命令 :  git tag v1.0.0.20231111.alpha   ( 创建标签 )

命令 :  git push origin v1.0.0.20231111.alpha  ( 将标签上传到远程仓库 )

具体操作如下:

上传后,在远程仓库汇中就可以看到该标签,并且标识上传的开发环境的分支。

进入生成环境(master),创建一个相对生成环境的标签,并且上传到自己的远程仓库,命令如下:

命令 :  git checkout master  ( 进入生成环境 )

命令 :  git tag v2.0.0.20231111.r  ( 创建生成环境标签 )

命令 :  git push origin v2.0.0.20231111.r  ( 上传到远程仓库 )

具体操作如下:

然后我们回到Gitee码云查看远程仓库是否有这两个标签。如下:

在远程仓库中可以看到已上传的两个标签。

注:

如果发现,上传到远程仓库的标签有误,需要删除。具体操作顺序如下:

我们需要先将本地的标签进行删除,在将远程仓库的标签删除才可。

删除标签命令如下: 

命令 : git tag -d v2.0.0.20231111.r   ( 将本地的标签删除 )

命令 : git push origin :refs/tags/v2.0.0.20231111.r  ( 将远程仓库标签删除 )

 具体操作如下:

在Gitee码云远程仓库中可以看到生成环境的标签已经删除,如图 : 

三、收获

学习Git分支和标签是使用Git进行版本控制的关键部分,对于个人开发者和团队来说都是非常有益的。以下是学习Git分支与标签给我带来的一些主要收获:

Git分支:

  1. 并行开发: 了解如何使用分支使得团队能够在同一时间内独立地开发不同的功能或修复不同的问题,从而提高开发效率。

  2. 特性分支: 学会使用特性分支,使得每个新功能或变更都有一个专门的分支,便于跟踪和管理。

  3. 分支合并: 理解分支合并的概念,学会如何将一个分支的更改合并到另一个分支,确保代码的完整性和一致性。

  4. 冲突解决: 了解并学会解决分支合并中可能发生的冲突,学会使用工具或手动解决冲突。

  5. 远程分支: 了解如何与远程仓库同步分支,包括推送本地分支到远程仓库以及拉取远程分支到本地。

  6. 分支管理策略: 了解和选择适合项目的分支管理策略,如Git Flow等,以便更好地组织和协调团队的工作。

Git标签:

  1. 版本发布: 学会使用标签来标记项目的重要版本发布,使得每个发布都有一个清晰的标识。

  2. 语义化版本控制: 了解语义化版本控制(Semantic Versioning)的概念,并学会如何使用标签来遵循版本号规范。

  3. 标签注释: 学会使用附注标签并添加有意义的注释,以便在查看标签历史时了解每个版本的变更和目的。

  4. 标签的推送与删除: 学会将本地标签推送到远程仓库,以及在需要的情况下删除本地和远程的标签。

  5. 版本回滚: 了解如何使用标签来回滚到特定版本,以处理紧急问题或回退到稳定的版本。

  6. 团队协作: 学会在团队协作中合理使用标签,以便整个团队能够清晰地了解项目的版本历史和状态。

通过学习这些Git分支和标签的概念和技巧,你将能够更高效地进行代码管理、团队协作,并更好地组织项目的版本历史。这些技能对于任何使用Git进行版本控制的开发者都是非常重要的。


最后Git分支与Git标签的介绍及其场景应用就到这里,祝大家在敲代码的路上一路通畅!

感谢大家的观看 !

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

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

相关文章

Some/IP学习笔记

目录 1.概述 2.SOME/IP 报文格式 3.数据结构序列化 1.概述 SOME/IP全称为Scalable Service Oriented MiddlewarE Over IP&#xff0c;是车载以太网技术中的核心内容&#xff0c;它为网络提供了面向服务的通信方式。一个服务可以包含0个或者多个事件&#xff08;events&#…

【C++ 学习 ㉟】- 异常详解

目录 一、C 异常处理的基本语法 1.1 - 抛出异常 1.2 - 检测和捕获异常 二、在函数调用链中异常栈展开的匹配原则 三、异常重新抛出 四、异常规范 五、C 标准异常体系 程序的错误大致可以分为以下三种&#xff1a; 语法错误&#xff1a;在编译和链接阶段就能发现&#xf…

Linux——vim简介、配置方案(附带超美观的配置方案)、常用模式的基本操作

vim简介、配置方案、常用模式的基本操作 本章思维导图&#xff1a; 注&#xff1a;本章思维导图对应的xmind和.png文件都已同步导入至资源 1. vim简介 vim是Linux常用的文本编辑器&#xff0c;每个Linux账户都独有一个vim编辑器 本篇我们介绍vim最常用的三种模式&#xff1a;…

史上最全最新Ubuntu20.04安装教程(图文)

总的来说&#xff0c;安装Ubantu包含以下三个步骤&#xff1a; 一、安装虚拟机 二、Ubuntu镜像下载 三、虚拟机配置 一、安装虚拟机 选择安装VMware Workstation&#xff0c;登录其官网下载安装包&#xff0c;链接如下&#xff1a; 下载 VMware Workstation Pro​www.vmwa…

Linux中字符设备的打开、写入

一个内核模块应该由以下几部分组成。 第一部分&#xff0c;头文件部分。一般的内核模块&#xff0c;都需要 include 下面两个头文件&#xff1a; #include <linux/module.h> #include <linux/init.h> 第二部分&#xff0c;定义一些函数&#xff0c;用于处理内核…

【Python大数据笔记_day07_hive中的分区表、分桶表以及一些特殊类型】

分区表 分区表的特点/好处:需要产生分区目录,查询的时候使用分区字段筛选数据,避免全表扫描从而提升查询效率 效率上注意:如果分区表在查询的时候呀没有使用分区字段去筛选数据,效率不变 分区字段名注意:分区字段名不能和原有的字段名重复,因为分区字段名要作为字段拼接到表后…

常见面试题-JDK和CGLIB动态代理

JDK 动态代理和 CGLIB 动态代理对比 JDK 动态代理只能代理实现了接口的类&#xff0c;而 CGLIB 可以代理未实现任何接口的类。另外CGLIB 动态代理是通过生成一个被代理类的子类来拦截被代理类的方法调用&#xff0c;因此不能代理声明为final 类型的类和方法就二者的效率来说&a…

信息系统项目管理师 教材目录、考试大纲、考情

文章目录 考情考试大纲第1章 信息化发展第2章 信息技术发展第3章 信息系统治理第4章 信息系统管理第5章 信息系统工程第6章 项目管理概论第7章 项目立项管理第8章 项目整合管理第9章 项目范围管理272第10章 项目进度管理297第11章 项目成本管理334第12章 项目质量管理358第13章…

【图像卷积与卷积层】的基本概念与区别

图像卷积 卷积操作是指将一个滤波器&#xff08;也称为卷积核或内核&#xff09;应用于输入图像的小块区域&#xff0c;然后将滤波器在整个图像上滑动&#xff0c;逐步计算出输出特征图。这个过程可以帮助网络学习到图像的局部特征&#xff0c;因为每个卷积核都可以学习到不同…

VulnHub Prime_Series_Level-1

一、信息收集 1.nmap扫描 ┌──(root&#x1f480;kali)-[~/桌面] └─# arp-scan -l┌──(root&#x1f480;kali)-[~/桌面] └─# nmap -sS -A -p- 192.168.103.202发现开放了22和80端口 2.web页面 打开80端口的web页面&#xff0c;是一张静态的图片&#xff0c;没什么价…

【Seata源码学习 】 扫描@GlobalTransaction注解 篇一

1. SeataAutoConfiguration 自动配置类的加载 基于SpringBoot的starter机制&#xff0c;在应用上下文启动时&#xff0c;会加载SeataAutoConfiguration自动配置类 # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfigurationio.seata.spring.boot.aut…

探寻知识的新路径——电大搜题助您开启学习新纪元

江西开放大学和广播电视大学一直以来都是许多自学者和职场人士追寻知识的圣地。然而&#xff0c;对于许多学子来说&#xff0c;学习的过程也常常充满了困惑和挑战。为了帮助这些学习者通过更高效、便捷的方式获取知识&#xff0c;江西开放大学推出了一款创新的学习工具——电大…

谈谈越来越无效的拥塞控制

简单看一个图&#xff1a; 它不是互联网本身&#xff0c;但这是典型网络的必要组件&#xff0c;它决定了 flow 如何从从一边流向另一边&#xff1a;一条 flow 经过交换节点通过 NIC 被导入一条链路前在 buffer 中排队。 现如今大多数工程师的工作都在折腾那个单独的盒子&…

231112-中文错别字识别与纠正问题的大模型与小模型调研

A. 引言 当前&#xff0c;以ChatGPT为代表的大语言模型&#xff08;Large Language Models, LLMs&#xff09;正引领着新一轮工业革命。ChatGPT最开始的研究领域隶属于NLP的一个子问题&#xff0c;其输入是text&#xff0c;输出也是text。在从文本输入到文本输出的诸多应用场景…

C语言从入门到精通之【概述】

#include指令和头文件 例如#include <stdio.h>&#xff0c;我们经常看到C文件最上面会有类似这样的语句&#xff0c;它的作用相当于把stdio.h文件中的所有内容都输入该行所在的位置。实际上&#xff0c;这是一种“拷贝-粘贴”的操作。 #include这行代码是一条C预处理器…

Smart Link 和 Monitor Link应用

定义 Smart Link常用于双上行链路组网&#xff0c;提高接入的可靠性。 Monitor Link通过监视上行接口&#xff0c;使下行接口同步上行接口状态&#xff0c;起到传递故障信息的作用。 Smart Link&#xff0c;又叫做备份链路。一个Smart Link由两个接口组成&#xff0c;其中一个…

木疙瘩踩坑日记-容易忽略的一些BUG

在一开始玩家务必很清楚这三个概念 图形&#xff1a;舞台上元素的最小单位。软件自带的以及外部导入的图片默认都是图形&#xff01;最朴素的元素&#xff01;可以添加预制动画、关键帧动画、进度动画&#xff08;软件自带的形状&#xff09; 元件&#xff1a;一个可以内部封…

高性能收发原始数据包的框架(Netmap)

一、Netmap 简介 Netmap 是一个高性能收发原始数据包的框架&#xff0c;由 Luigi Rizzo 等人开发完成&#xff0c;其包含了内核模块以及用户态库函数。其目标是&#xff0c;不修改现有操作系统软件以及不需要特殊硬件支持&#xff0c;实现用户态和网卡之间数据包的高性能传递。…

Git系列之分支与标签的使用及应用场景模拟

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Git实战开发》。&#x1f3af;&#x1f3af; &a…

【网络奇遇记】我和因特网的初相遇2 —— 三种交换方式

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 前言一. 电路交换1.1 电路交换讲解1.2 电路交换实例 二. 分组交换1.1 分组交换讲解1.2 分组交换实例…