分不清Git branch和tag?那就看看这里吧

作者:唐叔在学习
一句话:听说有老哥分不清Git branch和tag?今天我们就好好叨叨这两货!

类比

  • Git Branch (分支):就像一本正在书写中的书书签。你随时会把书签移动到最新写完的那一页。它会移动,代表着一个正在发展的开发线
  • Git Tag (标签):就像一本已经出版的书版本号(例如 v1.0, v2.1-release)。一旦出版,这个版本号就永久指向那个特定版本的内容,永远不会改变。它代表的是一个历史瞬间的快照

Git Branch

git branch 的主要作用是创建、列出、重命名和删除【开发线】。这条开发线让你能在不同的任务(比如新功能、Bug 修复、实验)之间进行隔离和切换,而不会互相干扰。

你可以把它想象成游戏中的存档点平行宇宙

  • 你在主宇宙(main 分支)里有一个稳定的游戏存档。

  • 你想尝试一个高风险的选择,又怕搞砸主存档,于是你创建了一个平行宇宙(新分支)。

  • 你在平行宇宙里随便折腾,无论成功失败,都不会影响主宇宙。

  • 如果尝试成功了,你可以把平行宇宙的成果合并回主宇宙;如果失败了,直接删除这个平行宇宙即可,主宇宙安然无恙。

为什么需要分支?

在没有分支的版本控制系统中:

  • 如果你想开发一个新功能,你必须直接在主代码上修改。
  • 如果功能开发到一半,有一个紧急 Bug 需要修复,你会非常头疼:提交未完成的功能代码会破坏主线,不提交又无法修复 Bug。

分支完美地解决了这个问题:每个任务都可以在独立的分支上完成,互不干扰。

Git Tag

Tag 的主要作用是标记项目历史中的特定点,通常用于发布版本

  1. 版本发布 (最主要用途)
    当你发布一个重要的版本(如 v1.0.0, v2.1.0)时,你会在那个提交上打一个标签。这样,任何时候你都可以轻松地获取那个特定版本的代码。

    git tag -a v1.0.0 -m "Release version 1.0.0"
    
  2. 创建稳定点的引用
    方便测试、部署或回滚。运维人员可以准确地部署打了 v1.0.0 标签的代码,而不必担心分支已经有了新的、可能不稳定的提交。

  3. 替代难记的提交哈希值
    相比使用 git checkout a1b2c3d4,使用 git checkout v1.0.0 要直观和容易得多。

标签有两种类型:

  • 轻量标签 (Lightweight):只是一个指向特定提交的指针,就像一个不会移动的分支。

    git tag v1.0.0-lightweight
    
  • 附注标签 (Annotated):是 Git 数据库中的一个完整对象。它们包含打标签者的名字、邮箱、日期、标签信息(message),并且可以被签名和验证。推荐始终使用附注标签来发布版本

    git tag -a v1.0.0 -m "This is the version 1.0.0 release"
    

区别比较

下面这个表格清晰地展示了两者的核心差异:

特性Git Branch (分支)Git Tag (标签)
目的支持新的开发,用于隔离特性开发或修复 Bug。标记重要的历史节点,通常用于版本发布。
是否会移动(是“移动的指针”)。当你在此分支上提交新代码时,分支指针会自动向前移动。(是“固定的指针”)。一旦创建,它就永久地指向那个特定的提交,永不改变。
生命周期临时性的。特性开发完成并合并后,分支通常会被删除。永久性的。一旦创建,通常会永久保留在仓库中,以供未来参考。
内容指向一个提交,没有额外信息。附注标签包含丰富的元数据:创建者、日期、标签信息等。
常用操作git checkout <branch>, git merge <branch>, git branch -d <branch>git tag <tagname>, git push --tags, git checkout <tagname>
类比书签:标记你读到哪了,会随着阅读而移动。版本号:标记一本出版的书籍的特定版次,永不改变。

工作流示例

假设你有以下提交历史:

A --- B --- C --- D (main)
  1. 使用 Branch (分支)

    • 你在提交 B 处创建了一个新分支 feature/logingit branch feature/login B

    • 你在新分支上工作,提交了 EF

    • 现在历史变了,feature/login 分支指针移动到了 F

      A --- B --- C --- D (main)
               \
                E --- F (feature/login)
      
    • 分支指针移动了

  2. 使用 Tag (标签)

    • 你认为提交 D 是一个可以发布的稳定版本。

    • 你在提交 D 上打一个标签: git tag -a v1.0.0 D -m "First release"

    • 之后,你在 main 分支上继续开发,提交了 GH

    • 现在历史看起来是这样:

      A --- B --- C --- D (v1.0.0) --- G --- H (main)
      
    • 无论未来 main 分支如何发展,标签 v1.0.0 永远坚定地指向提交 D

总结

  • 什么时候用 branch
    当你要开发新功能、修复bug,需要一条独立的、会不断演进的开发线时。例如:git checkout -b feature/new-header

  • 什么时候用 tag
    当你完成一个开发阶段(如测试完毕)、准备发布一个版本(如 v1.0, v2.1)时,为你当前稳定可靠的代码拍一张“快照”并标记下来。例如:git tag -a v2.1.0 -m "Stable release"

简单记:分支用于“前进”,标签用于“纪念”。你在一系列提交上“前进”(分支),然后在你值得纪念的地方“立碑”(标签)。


往期文章推荐

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐叔在学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值