首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >签出Git标签会导致“分离的头状态”

签出Git标签会导致“分离的头状态”
EN

Stack Overflow用户
提问于 2011-04-07 21:51:18
回答 2查看 125.1K关注 0票数 176

我正在为我的git项目开发一个部署脚本,并且我刚刚开始使用标签。我添加了一个名为v2.0的新标记

代码语言:javascript
复制
git tag -a v2.0 -m "Launching version 2.0"

我已经将这个标记推送到远程存储库

代码语言:javascript
复制
git push --tags

当我尝试执行部署脚本并检查v2.0标记时,我收到以下消息:

您正处于“分离的头”状态。您可以查看周围,进行实验性更改并提交它们,并且可以通过执行另一次签出来丢弃在此状态下所做的任何提交,而不会影响任何分支。如果您想创建一个新的分支来保留您创建的提交,您可以(现在或以后)通过使用-b和checkout命令来完成此操作。示例: git checkout -b new_branch_name HEAD现在位于

这正常吗?存储库处于不确定状态,因为如果我这样做:

代码语言:javascript
复制
git branch

我得到以下输出:

代码语言:javascript
复制
* (no branch)
  master

很抱歉,如果这是显而易见的,但我不能理解它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-07 22:01:55

好吧,首先有几个术语有点过于简单化了。

git中,tag (和许多其他东西一样)就是所谓的treeish。这是一种引用项目历史上某个时间点的方式。树可以是一个标记、一个提交、一个日期说明符、一个序号说明符或许多其他东西。

现在,branch就像一个标签,但它是可移动的。当您“在”一个分支上并进行提交时,该分支将移动到您所做的新提交,以指示它的当前位置。

您的HEAD是指向被认为是“当前”的分支的指针。通常,当您克隆存储库时,HEAD将指向master,而后者将指向提交。然后,当您执行诸如git checkout experimental之类的操作时,将HEAD切换为指向experimental分支,该分支可能指向不同的提交。

现在来解释一下。

当您执行git checkout v2.0时,您正在切换到branch未指向的提交。HEAD现在是“分离的”,并且不指向分支。如果您决定现在进行提交(如您所愿),则不需要更新分支指针来跟踪此提交。切换回另一个提交将使您丢失所做的这个新提交。这就是消息告诉你的。

通常,你能做的就是说git checkout -b v2.0-fixes v2.0。这将在树状v2.0 (本例中为标记)所指向的提交处创建一个新的分支指针,然后将您的HEAD移动到该指针。现在,如果进行提交,就可以跟踪它们(使用v2.0-fixes分支),并且可以像往常一样工作。您所做的没有什么“错误”,特别是如果您只是想看一看v2.0代码。但是,如果您想要在其中进行任何想要跟踪的更改,您将需要一个分支。

你应该花点时间理解整个git的DAG模型。它出人意料地简单,并且使所有的命令都非常清晰。

票数 457
EN

Stack Overflow用户

发布于 2011-04-07 21:56:11

是的,这是正常的。这是因为您签出了一个没有头部的单一提交。特别是它(迟早)不是任何分支的负责人。

但是这种状态通常是没有问题的。你可以从标签中创建一个新的分支,如果这让你觉得更安全的话:)

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5582208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档