对git中tag, branch的重新理解

1. 问题背景

项目中之前一个tag(v1.0)打错了,想删除它,但我们从此tag v1.0中迁出新建分支Branch_v1.0,在此分支下修复了bug,想重新打一个tag v1.0,原来的tag v1.0可以删除掉吗?

错误的理解:按我之前的理解,Branch_v1.0是从原来的tag v1.0中迁出,对tag v1.0有引用,而新打的tag又是基于Branch_v1.0,对Branch_v1.0存在引用,从而Branch_v1.0不可以删除,自然而然,原来的tag v1.0也不能删除。所以新打的tag只能换一个名字。

2. 解决方法

  • 本地建了个git仓库,模拟这种情况,下图展示的就是一上问题背景中描述的场景,tag v1.0为错误标签,master分支已经离开tag1.0的位置,有新的提交,此时发现v1.0有问题,所以从tag v1.0中迁出并创建新分支Branch_v1.0,修复了问题,然后新建tag v1.0.0(经过查看git文档可知,原来的tag1.0假设没有推送的远程,是可以直接删除掉,然后新的tag就取名v1.0,没问题或直接在新建tag时,直接用选项强制覆盖名称v1.0。但是若tag已推送到远程,其他人已经获取到了,这样删除就不太明智了,除非你删除后,通知其他人将本地仓库重新git clone ),此时可以删除Branch_v1.0吗?删除后,tag v1.0.0还能用吗?

    图标说明下:红色表示当前工作分支,绿色表示各个分支的最后一次提交,黄色表示tag,绿色+黄色,表示在绿色下面打的标签,并在同一位置,三个颜色在一起类比即可
    在这里插入图片描述

  • TortoiseGit中没找到删除分支的菜单,直接用命令操作。删除后,发现新建的tag v1.0.0没有影响,都还在。
    在这里插入图片描述

  • 继续操作,删除tag v1.0 ,然后看下仓库图,发现v1.0.0此时不再从tag v1.0流出(tag v1.0已被我删除),而是从 24dd6155 中流出, 这个24dd6155就是tag v1.0引用的git提交id号,从删除tag的命令行可知,tag v1.0引用的就是24dd6155。
    在这里插入图片描述
    在这里插入图片描述

综上所述,可以得出结论,tag, branch引用的是提交id(git每一次提交都会生成一个唯一id),不是某个tag或branch, 删除tag或branch不用对git的提交数据产生影响

有了这个认识,针对以上问题,就有了相应的解决方案了,即原来的tag1.0假设没有推送的远程,是可以直接删除掉,然后新的tag就取名v1.0,没问题或直接在新建tag时,直接用选项强制覆盖名称v1.0。但是若tag已推送到远程,其他人已经获取到了,这样删除就不太明智了,除非你删除后,通知其他人将本地仓库重新git clone。

相关推荐

  1. Vuemixin理解

    2024-01-11 15:02:01       27 阅读
  2. C++ const 浅显理解

    2024-01-11 15:02:01       18 阅读
  3. Promise理解

    2024-01-11 15:02:01       14 阅读
  4. python 类与函数理解

    2024-01-11 15:02:01       32 阅读

最近更新

  1. DOM XMLHttpRequest

    2024-01-11 15:02:01       0 阅读
  2. nginx详解

    2024-01-11 15:02:01       0 阅读
  3. vue实现表单输入框数字类型校验功能

    2024-01-11 15:02:01       0 阅读
  4. Perl 语言入门学习

    2024-01-11 15:02:01       1 阅读
  5. perl语言入门学习

    2024-01-11 15:02:01       1 阅读
  6. Apache Spark 的基本概念和在大数据分析中的应用

    2024-01-11 15:02:01       1 阅读
  7. CSS 下拉菜单的设计与实现

    2024-01-11 15:02:01       1 阅读
  8. 快速排序算法Python实现

    2024-01-11 15:02:01       1 阅读
  9. python爬虫入门(二)之Requests库

    2024-01-11 15:02:01       1 阅读

热门阅读

  1. 数据分析-Pandas如何轻松处理时间序列数据

    2024-01-11 15:02:01       41 阅读
  2. LeetCode 2696.删除子串后的字符串最小长度:栈

    2024-01-11 15:02:01       37 阅读
  3. LeetCode255.用队列实现栈

    2024-01-11 15:02:01       35 阅读
  4. Kafka集群部署

    2024-01-11 15:02:01       38 阅读
  5. C语言初学函数(练习)

    2024-01-11 15:02:01       36 阅读
  6. golang实现skiplist 跳表

    2024-01-11 15:02:01       30 阅读