Git 结帐标签导致“当前不在任何分支机构”

Git checkout tag leads to “Not currently on any branch”

我在标签结账时遇到了非常奇怪的问题。在将 develop 的最新更改合并到 master 之后,我从 master 创建了一个标签并推送到远程。然后在生产中成功拉出但是当我检查标签和 运行 git 状态时我得到

Not currently on any branch

在我的本地机器上 git 状态正确显示头部在特定标记处分离,例如 1.0.0

git branch -v
* (no branch) ca992e2 Example commit message
develop     e945a50 Example commit message
master      ca992e2 Example commit message

有什么建议吗?

这是 "normal" 行为。 通过签出标签,您可以将本地存储库的 HEAD 定位到标签。你不再在一个分支上。如果您不打算进行任何更改,这无关紧要

如果您需要进行更改,我会看到两个选项:

  1. 您想继续在您应用标签时所在的分支上工作。然后你应该检查到那个分支。

  2. 您需要根据您创建的标签执行修复,并且该修复不能在您最初用于创建标签的分支上。然后,您需要从该标记开始创建一个新分支。 该命令将是:

    git checkout -b new-branch tag

已接受的答案是正确的(我已投赞成票)。详细说明最后一点——那个 Git,一个肯定古老的 1.7,只是说你有一个分离的 HEAD,但一个更现代的 2.13,说你有一个 detached at v1.0.0 的 HEAD—在这两个版本之间的这些年里,git status 命令在功能上获得了许多非常有用和重要的提升。

尚不清楚 "detached at / from" 代码何时进入,因为 the release notes 中未列出,但这里有一份有用的清单:

  • 1.7.1:git status了解子模块
  • 1.7.2: git status 可以在 -s -b 输出中包含分支名称
  • 1.7.3.5:git status学会了在路径名中引用不可打印的字符
  • 1.7.6:git status -z 修复(如果在脚本中使用它很重要)
  • 1.7.10.13:更多 git status --porcelaingit status -z 修复(再次针对脚本)
  • 1.7.11.3:git status(和 git diff 本身)已修复以处理名为 -
  • 的文件
  • 1.8.2:git status 在这些操作中学会了说出哪个分支被平分或变基
  • 1.8.3:git status 也学会了报告处于 git revert 中间的情况
  • 1.8.4:git status 学习了配置选项 status.branchstatus.short
  • 1.8.5:git status 改进了几个报告:子模块、精选和当前分支(如果有)相对于其上游的状态
  • 2.4.0:git status学习了-v -v,其detached at/detached fromgit branch[=59=同步改进]
  • 2.5.0:git status 详细说明了正在进行的交互式变基
  • 2.6.2:git status不再说没用的HEAD detached at HEAD

"detached at" 或 "detached from" 状态是通过扫描 HEAD 的 reflog 来计算的,因此它不是 100% 可靠的,具体取决于您卡在 reflog 中的内容。还是很有用的