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 定位到标签。你不再在一个分支上。如果您不打算进行任何更改,这无关紧要
如果您需要进行更改,我会看到两个选项:
您想继续在您应用标签时所在的分支上工作。然后你应该检查到那个分支。
您需要根据您创建的标签执行修复,并且该修复不能在您最初用于创建标签的分支上。然后,您需要从该标记开始创建一个新分支。
该命令将是:
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 --porcelain
和 git 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.branch
和 status.short
- 1.8.5:
git status
改进了几个报告:子模块、精选和当前分支(如果有)相对于其上游的状态
- 2.4.0:
git status
学习了-v -v
,其detached at
/detached from
与git branch
[=59=同步改进]
- 2.5.0:
git status
详细说明了正在进行的交互式变基
- 2.6.2:
git status
不再说没用的HEAD detached at HEAD
"detached at" 或 "detached from" 状态是通过扫描 HEAD
的 reflog 来计算的,因此它不是 100% 可靠的,具体取决于您卡在 reflog 中的内容。还是很有用的
我在标签结账时遇到了非常奇怪的问题。在将 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 定位到标签。你不再在一个分支上。如果您不打算进行任何更改,这无关紧要
如果您需要进行更改,我会看到两个选项:
您想继续在您应用标签时所在的分支上工作。然后你应该检查到那个分支。
您需要根据您创建的标签执行修复,并且该修复不能在您最初用于创建标签的分支上。然后,您需要从该标记开始创建一个新分支。 该命令将是:
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 --porcelain
和git 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.branch
和status.short
- 1.8.5:
git status
改进了几个报告:子模块、精选和当前分支(如果有)相对于其上游的状态 - 2.4.0:
git status
学习了-v -v
,其detached at
/detached from
与git branch
[=59=同步改进] - 2.5.0:
git status
详细说明了正在进行的交互式变基 - 2.6.2:
git status
不再说没用的HEAD detached at HEAD
"detached at" 或 "detached from" 状态是通过扫描 HEAD
的 reflog 来计算的,因此它不是 100% 可靠的,具体取决于您卡在 reflog 中的内容。还是很有用的