如何在处于分离的HEAD状态时列出git分支?

时间:2017-11-15 11:56:10

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

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

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

1 个答案:

答案 0 :(得分:0)

这应该与Git 2.29(2020年第4季度)更一致地工作:“ git statusman难以通过解释记录的reflog条目来显示其来源某些事件,例如“ checkout @{u}”,并给出了严重错误。

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

这也会影响git branch

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

wt-status:容忍悬空的痕迹

签名人:Jonathan Tan

当用户签出HEAD的上游分支时,该上游分支不是本地分支,然后运行“ git statusman,如下所示:

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

没有打印状态,而是一条错误消息:

fatal: HEAD does not point to a branch  

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

这是因为“ git statusman在确定“ HEAD detached”消息时会读取reflog,因此尝试DWIM“ @{u}” ”,但这不起作用,因为HEAD不再指向分支。

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