【问题标题】:How to list git branches when in detached HEAD state?处于分离 HEAD 状态时如何列出 git 分支?
【发布时间】:2018-04-28 15:23:26
【问题描述】:

通常,我可以使用git branch 列出本地分支,使用git branch -r 列出远程分支。但是,这些命令不适用于分离的 HEAD - 我得到fatal: HEAD does not point to a branch(大概是因为 git branch 试图确定当前分支以便它可以用星号标记它)。

当我处于分离的 HEAD 中时,获取分支信息的最佳方式是什么?请注意,我希望得到相同格式的输出,包括着色。

【问题讨论】:

  • git branch 对我来说在分离的头部状态下工作得很好。我做了git log,从几个提交中挑选了一个SHA1,并检查了它以达到分离的头部状态。 git branch 仍然适用于我,颜色等等。
  • 对我来说也一样。它将* (no branch) 打印为当前分支。我使用的是相当老的 git (1.7.1)。您在哪个平台上使用哪个版本?
  • @gucce 哦,这很有趣!现在我看到它有时会起作用,有时会引发错误。我会尝试缩小范围。我在 Linux Mint 上使用 git 2.14.2。

标签: git git-branch git-detached-head


【解决方案1】:

这应该与 Git 2.29(2020 年第四季度)更一致:“git status(man) 无法通过解释记录某些事件的 reflog 条目来显示它的来源,例如“checkout @{u}”,并给出一个硬/致命错误。

尽管本质上不可能给出正确答案,因为 reflog 条目丢失了一些信息(例如,“@{u}”不记录用户所在的分支,因此需要计算哪个分支“上游”,并且即使记录可用,分支之间的关系可能已经改变),至少隐藏错误以允许“status”显示其输出。

这也会影响git branch

参见Jonathan Tan (jhowtan)commit f24c30ecommit ec06b05commit a4f66a7(2020 年 9 月 1 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit 0df670b,2020 年 9 月 9 日)

wt-status: 容忍悬空标记

签字人:Jonathan Tan

当用户检出 HEAD 的上游分支时,上游分支不是本地分支,然后运行 ​​"git status"(man) ,如下所示:

git clone $URL client
cd client
git checkout @{u}
git status  

不打印状态,而是显示错误消息:

fatal: HEAD does not point to a branch  

(运行“git branch(man) 时出现此错误消息,即使在签出其他内容后仍然存在 - 它仅在签出分支后才会停止。)

这是因为“git status(man) 在确定“HEAD detached”消息时会读取 reflog,因此会尝试 DWIM“@{u}”,但这并不无法工作,因为 HEAD 不再指向分支。

因此,在计算工作树的状态时,请容忍悬空标记。这是通过向dwim_ref()repo_dwim_ref() 添加一个附加参数来完成的。

【讨论】:

    猜你喜欢
    • 2011-08-28
    • 2014-03-17
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 2022-01-19
    • 2023-04-09
    相关资源
    最近更新 更多