(一)GitLab 中的分支和标签的定义及操作
1. 分支(Branch)

定义
分支是代码仓库中的独立开发路径,允许你在不影响主线(通常是 mainmaster 分支)的情况下,进行实验、开发新功能或修复错误。

相关命令

  • 创建分支

    git branch <branch-name>
    

    例如,git branch feature-login 会基于当前所在分支的最新提交创建一个名为 feature-login 的新分支。

  • 从指定起点创建分支

    git branch <branch-name> <start-point>
    

    例如,git branch bugfix-123 34a5678 以哈希值为 34a5678 的提交为起点创建 bugfix-123 分支。

  • 切换分支

    git checkout <branch-name>
    

    或者使用 git switch <branch-name>(Git 1.22.0 及以上版本)。

  • 创建并切换到新分支

    git checkout -b <branch-name>
    

    或者使用 git switch -c <branch-name>(Git 1.22.0 及以上版本)。

  • 查看分支

    git branch
    

    查看本地所有分支,当前所在分支前会有 * 标记。

  • 查看本地和远程所有分支

    git branch -a
    
  • 删除本地分支

    git branch -d <branch-name>
    

    如果分支还没有合并到当前分支,Git 会拒绝删除。使用 -D 强制删除。

  • 删除远程分支

    git push origin --delete <branch-name>
    
2. 标签(Tag)

定义
标签是用于标记代码仓库中某个特定提交的轻量级引用,通常用于标记项目中的重要版本,如发布版本(v1.0.0、v2.0.0 等)。

相关命令

  • 创建轻量标签

    git tag <tag-name>
    

    例如,git tag v1.0.0 创建一个轻量标签。

  • 创建含注释标签

    git tag -a <tag-name> -m "注释信息"
    

    例如,git tag -a v1.0.1 -m "Release version 1.0.1" 创建一个含注释的标签。

  • 查看标签

    git tag
    

    列出所有本地标签。

  • 查看标签详情

    git show <tag-name>
    

    查看标签的详细信息,包括关联的提交信息、标签的注释(如果是含注释标签)。

  • 推送标签到远程仓库

    git push origin <tag-name>
    

    或者推送所有标签:

    git push origin --tags
    
  • 删除本地标签

    git tag -d <tag-name>
    
  • 删除远程标签

    git push origin :refs/tags/<tag-name>
    

小结

分支和标签在版本控制中扮演着不同的角色。分支用于并行开发,允许开发者在独立的环境中进行实验和开发,而标签则用于标记特定的代码版本,通常用于版本发布和记录项目里程碑。

场景:开发一款电商网站

假设我们正在开发一款电商网站,项目使用 Git 进行版本控制,并托管在 GitLab 上。

1. 分支(Branch)

定义
分支是代码仓库中的一个独立开发路径,允许你在不影响主线代码的情况下进行开发。

生产实例

  • 主线分支(mainmaster

    • 这是项目的主分支,包含了当前生产环境的稳定代码。所有经过测试和验证的功能都会合并到这里。
    • 例如,main 分支的代码部署在生产服务器上,用户可以访问网站。
  • 开发分支(develop

    • 这是开发团队的主要工作分支,用于集成新功能和修复。
    • 开发人员在 develop 分支上进行日常开发,然后定期将代码合并到 main 分支。
  • 功能分支(feature/*

    • 当开发新功能时,开发人员会从 develop 分支创建一个功能分支,例如 feature/user-login
    • 在这个分支上,开发人员可以独立开发用户登录功能,而不影响其他开发工作。
    • 完成后,通过合并请求(Merge Request)将代码合并回 develop 分支。
  • 修复分支(fix/*

    • 如果在生产环境中发现了一个紧急问题,开发人员会从 main 分支创建一个修复分支,例如 fix/bug-123
    • 在这个分支上修复问题后,通过合并请求将代码合并回 main 分支,并发布新版本。

小结
分支是动态的,用于开发和集成代码。开发人员可以在分支上进行实验、开发新功能或修复问题,而不会影响主线代码的稳定性。

2. 标签(Tag)

定义
标签是代码仓库中某个特定提交的标记,通常用于标记项目的重要版本,如发布版本。

生产实例

  • 发布版本

    • 当开发团队完成了一个新版本的开发,并且代码已经通过测试,准备发布时,他们会创建一个标签。
    • 例如,当 develop 分支的代码合并到 main 分支后,开发团队会创建一个标签 v1.0.0
      git tag -a v1.0.0 -m "Release version 1.0.0"
      git push origin v1.0.0
      
    • 这个标签 v1.0.0 标记了代码的某个特定状态,表示这是网站的第一个正式版本。
  • 回溯和修复

    • 如果在生产环境中发现了一个问题,开发人员可以查看标签 v1.0.0,找到对应的代码状态。
    • 他们可以在这个基础上创建一个修复分支,例如 fix/bug-123,修复问题后再次发布新版本,例如 v1.0.1
      git tag -a v1.0.1 -m "Release version 1.0.1 with bug fix"
      git push origin v1.0.1
      

小结
标签是静态的,用于标记代码的某个特定状态。它们通常用于发布版本,方便开发人员在需要时回溯到特定的代码状态。

(二)分支和标签的差别
  • 分支

    • 用途:用于开发和集成代码。
    • 特性:动态的,可以随时修改和更新。
    • 操作:创建、切换、合并、删除分支。
    • 示例feature/user-loginfix/bug-123
  • 标签

    • 用途:用于标记代码的特定状态,通常是发布版本。
    • 特性:静态的,一旦创建,不能修改。
    • 操作:创建、查看、删除标签。
    • 示例v1.0.0v1.0.1
生产实例总结
  • 分支

    • 开发人员在分支上进行功能开发和修复。
    • 通过合并请求将代码集成到主线分支。
    • 例如:feature/user-loginfix/bug-123
  • 标签

    • 在发布新版本时创建标签。
    • 用于标记代码的特定状态,方便回溯和修复。
    • 例如:v1.0.0v1.0.1

通过这个生产实例,你可以清楚地看到分支和标签在实际开发中的不同用途和操作方式。

(三)分支和标签的切换
1. 标签的切换命令

在 Git 中,标签(Tag)本身并不是一个可以切换到的“工作区”,因为标签只是一个指向特定提交的引用,而不是一个独立的开发路径(像分支那样)。因此,你不能直接“切换”到一个标签,但可以通过以下方式查看标签对应的代码状态:

git checkout <tag-name>

例如:

git checkout v1.0.0

这会将你的工作区切换到标签 v1.0.0 所指向的提交。此时,你的工作区会处于“分离头指针”(Detached HEAD)状态,这意味着你当前不在任何分支上。

2. 标签与分支的原理区别
  • 分支

    • 分支是一个动态的开发路径,可以随时修改和更新。
    • 当你切换到一个分支(如 feature/user-login)时,你在该分支上所做的任何更改都会被记录在这个分支的历史中。
    • 分支有自己的提交历史,可以独立于其他分支进行开发。
  • 标签

    • 标签是一个静态的引用,指向某个特定的提交。
    • 标签不会像分支那样有独立的提交历史。
    • 标签通常用于标记重要的版本(如发布版本),而不是用于开发。
3. 标签对应的分支

标签本身并不直接关联到某个分支,但它通常是从某个分支上的某个提交创建的。例如,你可能在一个分支(如 maindevelop)上创建了一个标签。

示例:创建标签并查看其对应的分支

假设你有一个项目,当前在 main 分支上,你刚刚发布了一个新版本 v1.0.0

创建标签
git tag -a v1.0.0 -m "Release version 1.0.0"
git push origin v1.0.0
查看标签对应的提交
git show v1.0.0

这会显示标签 v1.0.0 所指向的提交的详细信息,包括提交的哈希值、提交信息、作者等。

查看标签对应的分支

虽然标签本身不直接关联到某个分支,但你可以通过查看提交的哈希值来确定它来自哪个分支。例如:

git branch --contains <commit-hash>

假设标签 v1.0.0 指向的提交哈希值是 abc123,你可以运行:

git branch --contains abc123

这会列出所有包含该提交的分支。通常,你会看到 main 分支(或你创建标签时所在的分支)。

涉及的命令总结

创建标签
git tag -a <tag-name> -m "注释信息"
git push origin <tag-name>
查看标签
git tag
git show <tag-name>
查看标签对应的分支
git branch --contains <commit-hash>
切换到标签对应的提交
git checkout <tag-name>

注意事项

  • 分离头指针状态:当你切换到一个标签时,Git 会提示你处于“分离头指针”状态。这意味着你当前不在任何分支上,任何新的提交都不会被记录在某个分支的历史中。
  • 回到分支:完成查看后,建议切换回一个分支(如 maindevelop),以继续开发:
    git checkout main
    

通过这些命令和操作,你可以清楚地管理标签和分支,确保项目的版本控制清晰且高效。

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

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

相关文章

第2章 cmd命令基础:常用基础命令(3)

Hi~ 我是李小咖&#xff0c;主要从事网络安全技术开发和研究。 本文取自《李小咖网安技术库》&#xff0c;欢迎一起交流学习&#x1fae1;&#xff1a;https://imbyter.com 本节介绍的命令有显示系统信息&#xff08;systeminfo&#xff09;、启动指定程序&#xff08;start&am…

RabbitMQ 发送方确认的两大工具 (With Spring Boot)

核心概念解析 发布者确认机制的核心思想是&#xff1a;将消息投递的可靠性从“尽力而为”提升为“契约保证”。生产者不再是“发后不理”&#xff0c;而是与 Broker 建立一个双向的沟通渠道。 在 Spring AMQP 的封装下&#xff0c;这个机制主要由两个回调接口实现&#xff1a; …

KONG API Gateway中的核心概念

在使用Kong API Gateway&#xff08;API网关&#xff09;时&#xff0c;理解其核心概念是掌握其工作原理的基础。这些概念既体现了Kong的设计哲学&#xff0c;也决定了它如何适配复杂的API管理场景&#xff08;如微服务、多团队协作等&#xff09;。本文将系统梳理Kong的核心概…

如何解决pip安装报错ModuleNotFoundError: No module named ‘jupyterlab’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘jupyterlab’问题 摘要 在开发过程中&#xff0c;我们经常会遇到各种模块安装的问题&#xff0c;尤其是在使用PyCharm时&#xff0c;经常会遇到pip install时的…

3 运算符与表达式

运算符&#xff1a;对字面量或者变量进行操作的符号 表达式&#xff1a;用运算符把字面量或者变量连接起来符合java语法的式子就可以称作表达式不同运算符连接的表达式体现的是不同类型的表达式int a 10; int b 20; int c a b;&#xff1a;运算符&#xff0c;并且是算术运算…

MySQL的单行函数:

目录 函数的理解&#xff1a; MySQL的内置函数及分类&#xff1a; 单行函数&#xff1a; 数值函数&#xff1a; 基本函数&#xff1a; 角度与弧度互换函数&#xff1a; 三角函数&#xff1a; 指数与对数&#xff1a; 进制转换&#xff1a; 字符串函数&#xff1a; 日…

设计模式(二十一)行为型:状态模式详解

设计模式&#xff08;二十一&#xff09;行为型&#xff1a;状态模式详解状态模式&#xff08;State Pattern&#xff09;是 GoF 23 种设计模式中的行为型模式之一&#xff0c;其核心价值在于允许一个对象在其内部状态改变时改变其行为&#xff0c;使得对象看起来像是修改了它的…

深入理解 Doris Compaction:提升查询性能的幕后功臣

在 Doris 的数据存储与查询体系里&#xff0c;Compaction 是保障查询效率、优化存储结构的关键机制。如果你好奇 Doris 如何在高频写入后仍能高效响应查询&#xff0c;或是想解决数据版本膨胀带来的性能问题&#xff0c;这篇关于 Compaction 的深度解析值得收藏 &#x1f447; …

css 实现虚线效果的多种方式

使用边框实现虚线 通过设置元素的边框样式来实现虚线效果。以下为示例代码: .dashed {border: 1px dashed black; }使用 CSS 伪元素实现虚线 使用伪元素来模拟虚线的效果。以下为示例代码: .dashed::before {content: "";display: block;height: 1px;border-bo…

深入剖析 RocketMQ 分布式事务:原理、流程与实践

Apache RocketMQ 是一种分布式消息队列系统&#xff0c;支持分布式事务消息&#xff0c;以确保在分布式系统中数据的一致性。它通过一种基于两阶段提交(2PC)的机制结合补偿逻辑来实现分布式事务的最终一致性。以下是对 RocketMQ 分布式事务的详细讲解&#xff0c;包括其核心概念…

具身智能 自动驾驶相关岗位的技术栈与能力地图

一、硬技能技术栈&#xff08;优先级排序&#xff09; 1. 核心领域技术&#xff08;★★★★★&#xff09;技术方向具体技能学习建议大模型实战- VLA架构&#xff08;RT-2、PaLM-E&#xff09;开发/微调- 多模态对齐&#xff08;CLIP、Flamingo&#xff09;- 生成式策略&#…

实现了加载 正向 碰撞 雅可比 仿真

""" # 此示例从 URDF 文件中加载一个 UR10 机械臂的模型 # 随后演示 Pinocchio 库的基本功能,如正向运动学计算 # 雅可比矩阵计算、碰撞检测以及动力学仿真 """ # 导入 meshcat 的几何模块,用于创建和管理可视化的几何对象 import meshcat.geo…

【0基础PS】PS工具详解--画笔工具

目录前言一、画笔工具的位置与快捷键​二、画笔工具选项栏设置​三、画笔工具的进阶应用​四、常见问题及解决方法​总结前言 在 Photoshop 的众多工具中&#xff0c;画笔工具无疑是极具创造力和实用性的工具之一。无论是进行图像绘制、照片修饰&#xff0c;还是特效制作&…

window10和ubuntu22.04双系统之卸载ubuntu系统

window10和ubuntu22.04双系统之卸载ubuntu系统&#xff09;1. 删除Ubuntu系统占用的磁盘分区&#xff08;在Windows下操作&#xff09;2. 删除ubuntu开机引导项1. winr出来终端提示框后输入2. 然后会在命令行中显示电脑的硬盘列表&#xff0c;输入命令选择安装Windows的那个硬盘…

(C++)C++类和类的方法(基础教程)(与Python类的区别)

前言&#xff1a; 本篇博客建议搭配&#xff1a;&#xff08;Python&#xff09;类和类的方法&#xff08;基础教程介绍&#xff09;&#xff08;Python基础教程&#xff09;-CSDN博客 一起学习使用&#xff1b; 源代码&#xff1a; #include <iostream> #include &…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章分类下拉框实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解微博文章数据可视化分析-文章分类下拉框实现…

Git命令保姆级教程

Git 入门网站 https://learngitbranching.js.org/?localezh_CN Git 命令 git init // 在本地目录内部会生成.git文件夹 git initgit clone // 从git服务器拉取代码 // 代码下载完成后在当前文件夹中会有一个 shop 的目录&#xff0c;通过 cd shop 命令进入目录。 git clone ht…

Java Ai For循环 (day07)

循环结构 for&#xff1a;循环语句的作用&#xff1a;可以将一段代码重复的执行很多次for 循环语句格式&#xff1a;执行流程&#xff1a; 初始化语句执行条件判断语句&#xff0c;看结果是 true&#xff0c;还是 false false结束&#xff0c;true继续执行循环体语句执行条件控…

Directory Opus 使用优化

自定义快捷键 Directory Opus 移动标签到另一栏 设置快捷键&#xff1a;ctrl←/→ 设置步骤&#xff1a; 打开【设置】—>选择【自定义工具栏和快捷键】 选择【新建】—>【新建窗口快捷键】 输入快捷键命令 Go TABMOVEother此时可以点击运行进行测试&#xff0c;…

Qt知识点2『Ubuntu24.04.2安装Qt5.12.9各种报错』

问题1&#xff1a;Qt安装完毕后&#xff0c;新建一个最简单的测试程序&#xff0c;但是QtCreator左侧构建的三个按钮呈现灰色&#xff0c;无法进行构建操作答&#xff1a;进入QtCreator的Kits界面&#xff08;工具-选项&#xff09;&#xff0c;点击"自动检测"下的De…