git - 签出一个 git 标签实际上做了另一个
问题描述
这种行为对我来说似乎很奇怪,我有一个 git 标签,可以说是 tag-a,当我通过运行以下命令检查它时:
git checkout tag-a
它检查标签-b
user@server xxx ~/path/git-local-folder ((tag-b))
我猜 tag-a 和 tag-b 之间存在某种关系,但我不知道它是什么以及它的逻辑
解决方案
“ git checkout”命令有几种操作模式,它会根据你给它的参数类型自动选择。现在相关的是:
- 如果给它一个分支名称,它会将工作树和暂存区域更新为该分支引用的当前提交,并将 HEAD 标记更新为该分支的名称。随后的操作,例如“git commit”然后知道移动那个分支指针。
- 如果你给它一个提交而不是分支名称的引用,它会以相同的方式更新工作树和暂存区域,但不会将任何分支名称记录为 HEAD。这被称为“分离的 HEAD”,随后的“git commit”不会移动任何分支指针。标签名称属于这一类。
请注意,较新的“git switch”命令强制您明确区分:如果参数不是分支名称,除非您指定--detach
选项,否则它将失败。
现在,当您的提示尝试显示当前签出的分支时,最简单的查看位置是在 HEAD 文件中。但是,如果您处于“分离的 HEAD”状态,则无论您如何选择该提交,它都将只包含一个提交哈希。所以显示代码必须选择要显示的东西而不是分支名称。它可以查看是否有任何标签指向当前签出的提交,但如果有多个标签指向它,它不知道你使用了哪一个,只需要猜测。
在您的情况下,“tag-a”和“tag-b”可能引用了相同的提交。因此,一旦您检查了该提交,您正在使用的提示会查找标签并找到“tag-b”,即使您实际输入的是“tag-a”,甚至是提交哈希。
推荐阅读
- performance - 自 iOS 12 以来,其他人的 Scenekit 应用程序是否变慢并开始卡顿?
- jquery - 如何只勾选一个复选框
- python - Django REST Framework Web 登录不起作用
- python - python将ode与固定时间步长集成
- resttemplate - 使用 PowerMockito 模拟 postForObject 会引发错误
- mysql - 如何选择列值作为列名但我不知道字段值 MYSQL
- php - 将帖子 ID 传递给 Twig/Timber 函数
- sql - SQL - 如果所有记录都具有特定值,如何仅从子查询中检索记录
- javascript - 在Javascript中将对象的一部分从数字键转换为数组
- bluetooth - NFC 到蓝牙转换器