【Git】Git中 tag 与 branch 的关系与使用_git tag和branch-程序员宅基地

技术标签: 版本控制  github  Git  git  tag  branch  

个人主页金鳞踏雨

个人简介:大家好,我是金鳞,一个初出茅庐的Java小白

目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作

我的博客:这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进步 ~

在软件开发中,Git是一个版本控制系统,它使用 标签(tag)和 分支(branch)来管理代码的不同状态和版本。

Tag(标签)

什么是Tag(标签)?

标签是用于标记特定提交静态引用。它是一个有意义的名称,用于表示项目的里程碑、版本发布或重要的提交。标签是不可变的,一旦创建就不会随着新的提交而移动。

  • 标签可以是轻量标签(lightweight tag),只是一个指向特定提交的引用
  • 也可以是注释标签(annotated tag),它包含了额外的信息(如标签的作者、日期、注释等)

标签在代码库中起到固定特定提交的作用,方便用户快速访问。

Tag的应用场景

  1. 版本发布:标签经常用于版本发布。当软件达到一个重要的里程碑稳定的状态时,可以创建一个标签以表示该版本。例如,标签可以用于发布软件的正式版本号,如v1.0.0。
  2. 快照管理:标签可以用于创建代码库中特定提交的快照。这对于记录某个特定时间点的代码状态非常有用。团队成员可以根据标签来回溯历史代码状态,比如修复特定版本的错误或查找特定功能的实现。
  3. 版本回滚:如果在发布之后发现了重大问题,可以使用标签将代码库回滚到之前的某个版本,以恢复到稳定的状态。

Tag命令的使用

创建一个轻量标签

git tag <tagname>

创建一个带注释的标签

git tag -a <tagname> -m "Tag message"

列出所有标签

git tag

查看特定标签的详细信息

git show <tagname>

推送标签到远程仓库

git push origin <tagname>

推送所有标签到远程仓库

git push --tags

删除本地标签

git tag -d <tagname>

删除远程仓库的标签

git push origin --delete <tagname>

Branch(分支)

什么是Branch(分支)?

分支是代码开发过程中的不同线路或方向。每个分支都是从主分支(一般是master)派生出来的,开发者可以在分支上进行独立的工作,而不会影响主分支或其他分支。

分支可以用于开发新功能修复错误尝试实验性的更改。在一个分支上进行的更改不会立即影响其他分支,这使得团队成员可以同时进行多个并行开发任务。一旦开发工作完成,可以将分支合并回主分支或其他分支。

Branch的应用场景

  1. 并行开发:分支允许多个开发者同时在不同的分支上进行并行开发。每个分支可以独立地进行功能开发、错误修复等工作,而不会相互干扰。当一个功能开发完成后,可以将其合并到主分支或其他适当的分支中。
  2. 特性开发:为了实现一个新的功能,可以从主分支上创建一个新的分支,并在该分支上进行开发工作。这样可以保持主分支的稳定性,而在新分支上进行实验性的、尚未完成的工作。
  3. 修复错误:当发现代码库中的错误或缺陷时,可以在分支上修复它们,并将修复后的分支合并回主分支,以确保主分支的稳定性和质量。

Branch命令的使用

创建一个新分支

git branch <branchname>

切换到指定分支

git checkout <branchname>

创建一个新分支并切换到该分支

git checkout -b <branchname>

列出所有分支

git branch

合并指定分支到当前分支

git merge <branchname>

删除指定分支

git branch -d <branchname>

推送本地分支到远程仓库

git push origin <branchname>

删除远程仓库的分支

git push origin --delete <branchname>

如何取得指定的tag?

使用 git clone 整个仓库后使用,以下命令就可以取得该 tag 对应的代码。

git checkout tag_name 

但是,这时候 git 可能会提示你当前处于一个 “detached HEAD" 状态。

因为 tag 相当于是一个快照,是不能更改它的代码!!!

如果要在 tag 代码的基础上做修改,你需要一个分支,可以使用命令:

git checkout -b branch_name tag_name

这样会从 tag 创建一个分支,然后就和普通的 git 操作一样了~~~

文章到这里就结束了,如果有什么疑问的地方,可以在评论区指出~

希望能和大佬们一起努力,诸君顶峰相见

再次感谢各位小伙伴儿们的支持!!!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43715214/article/details/131059079

智能推荐

VIP年卡低至7折,限时加赠618次下载,我不允许任何人不心动!_csdn优惠活动-程序员宅基地

文章浏览阅读8.7k次,点赞4次,收藏6次。618狂欢,年中特惠福利拉满!即刻起购买VIP年卡,买1年我们送1年!_csdn优惠活动

【编译原理】语法分析_编译器常用的语法分析方法有哪两种-程序员宅基地

文章浏览阅读1.5k次。编译器常用的语法分析方法有自上而下和自下而上两种。正如它们的名字所示,自上而下分析器按从根结点到叶结点的次序来建立分析树,而自下而上分析器恰好相反。它们的共同点是从左向右地扫描输入,每次一个符号。最有效的自上而下和自下而上的分析法都只能处理上下文无关文法的子类。这些子类足以描述编程语言的大多数构造和它们的语法特征,其中L文法的分析器通常用手工实现,而LR文法的分析器通常利用自动工具构造。终结符: 即记号名。非终结符: 非终结符用来帮助定义由文法决定的语言,一个非终结符定义终结符串的一个集合。非终结符还在语言_编译器常用的语法分析方法有哪两种

数列分块入门(套题)(loj6277,loj6278,loj6279,loj6280,loj6281,loj6282,loj6283,loj6284,loj6285)_loj79-程序员宅基地

文章浏览阅读230次。前言zjoi考差了,码一些分块题缓解一下心情壹数列分块入门 1[loj6277]题目大意:区间加,单点查直接分块,区间加时完全覆盖的块打tag,边界块暴力重构块大小设为n\sqrt nn​,复杂度O(nn)\mathcal O(n\sqrt n)O(nn​)code#include<cstdio>#include<cctype>#include<c..._loj79

杂说CSS_ifc可以向下兼容吗-程序员宅基地

文章浏览阅读89次。1、CSS初始化为什么初始化CSS呢?因为浏览器的兼容问题,不同浏览器对标签的默认值是不同的,如果没有初始化CSS,往往会导致页面在不同浏览器页面在不同浏览器之间出现差异并且,多数浏览器会默认给初始页面添加上外边距简单的初始化页面* { padding: 0; margin: 0; box-sizing: border-box;}2、display 都有哪些值?block、inline、inline-block、list-item、table 、 inherit 和 nonebl_ifc可以向下兼容吗

python3 torndb:CONVERSIONS[field_type] = [(FLAG.BINARY, str)] + CONVERSIONS[f-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏6次。问题:把一个项目从python2 升级到python3时,发现torndb不能用了。提示如下错误: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/micstu/.local/lib/python3.5/site-packages/torndb...._conversions[field_type] = [(flag.binary, str)] + conversions[field_type] typ

随便推点

pom转Javabean_pom.xml解析为java bean-程序员宅基地

文章浏览阅读201次。让我这个菜鸟淡淡的忧伤一会1:项目中需要把pom文件转换成Java Bean,用于查看各个依赖的版本号。这里记录一下简单的demo。首先引入 <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version&..._pom.xml解析为java bean

Flutter学习笔记&学习资料推荐_pan.flutter实战第二版-程序员宅基地

文章浏览阅读3.2k次,点赞10次,收藏39次。对Flutter的学习已经有一段时间了,这里做一下总结记录吧,可能主要是学习资料的总结,还有一些杂七杂八的学习笔记。 Flutter 初体验 先说说对Flutter的感受吧,总的来说上手还是比较容易的,因为他的思想理念跟React十分相似,都是通过状态管理控制UI界面的更新,甚至连setState的方法名都是一样的,如果你是学习过类似React的框架的话,将很容易理解,基本可以直接开撸。但是它有好的地方,也有不好的地方。 好的地方:一个是它的reload热加载到手机,这样写代码调试的时候不用每次运行._pan.flutter实战第二版

安卓开发学习——第四天_安卓开发学习csdn-程序员宅基地

文章浏览阅读864次。3. 常用的UI布局1). LinearLayout: 线性布局 用来控制其子View以水平或垂直方式展开显示 2). RelativeLayout: 相对布局 用来控制其子View以相对定位的方式进行布局显示 3). FrameLayout: 帧布局 每一个子View都代表一个画面, 后面出现的会覆盖前面的画面 通过子View的androi_安卓开发学习csdn

linux 6下面用udev配置asm磁盘的注意事项_ls: cannot access /dev/asm*: no such file or direc-程序员宅基地

文章浏览阅读2k次。实验环境:虚拟机:virtualbox 5.0.24 r108355操作系统:rhel-server-6.5-x86_64看了刘相兵大大的:在Linux 6上使用UDEV解决RAC ASM存储设备名问题自己操作了一把,先前在linux5 的时候我是用asmlib来绑定ASM的,参考三思笔记,我在创建虚拟硬盘的时候用的SCSI格式的硬盘,在linux 5的时候_ls: cannot access /dev/asm*: no such file or directory

linux下Qt打包_如何在linux系统下把qt打包视频-程序员宅基地

文章浏览阅读1.1k次。1.新建Demo文件件,并将二进制可执行文件MiMouse放置在目录内2.在Demo文件夹下新建copy.sh文件touch copy.shcopy.sh文件内容如下#!/bin/bashLibDir=$PWD"/lib" #获取lib目录路径Target=$1lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))$(mkdir $LibDir) #创建lib目录for Variab_如何在linux系统下把qt打包视频

计算机网络的组成及通信子网和资源子网的划分_计算机网络可以分为通信子网和资源子网-程序员宅基地

文章浏览阅读1k次。网络操作系统:是网络软件的重要组成部分,是进行网络系统管理和通信控制的所有软件的集合,负责整个网络软件,硬件资源的管理以及网络通信和任务的调度,并提供用户与网络之间的接口,常用的网络操作系统有:Windows,Linux,Unix,netwear等。网络接口卡:简称网卡,又称为网络适配器,主要负责主机与网络之间的信息传输控制,功能是线路传输控制,如堵塞,冲突等,差错检测与恢复,代码转换以及数据帧的装配与拆装等。传输介质:用于将网络中各种设备连接起来,是数据传输的物理通道,有有线传输介质和无线传输介质之分。_计算机网络可以分为通信子网和资源子网

推荐文章

热门文章

相关标签