通常,我可以使用 列出本地分支,使用 列出git branch
远程分支git branch -r
。但是,这些命令不适用于分离的 HEAD - 我得到了fatal: HEAD does not point to a branch
(大概是因为 git branch 试图确定当前分支以便它可以用星号标记它)。
当我处于分离的 HEAD 中时,获取分支信息的最佳方式是什么?请注意,我想以相同的格式获得输出,包括着色。
通常,我可以使用 列出本地分支,使用 列出git branch
远程分支git branch -r
。但是,这些命令不适用于分离的 HEAD - 我得到了fatal: HEAD does not point to a branch
(大概是因为 git branch 试图确定当前分支以便它可以用星号标记它)。
当我处于分离的 HEAD 中时,获取分支信息的最佳方式是什么?请注意,我想以相同的格式获得输出,包括着色。
这应该与 Git 2.29(2020 年第四季度)更一致:“ git status
” (man)无法通过解释记录某些事件的 reflog 条目来显示它的来源,例如“ checkout @{u}
”,并给出一个硬/致命错误。
尽管本质上不可能给出正确的答案,因为 reflog 条目丢失了一些信息(例如,“ @{u}
”不记录用户所在的分支,因此需要计算哪个分支“上游”,即使记录可用,分支之间的关系可能已经改变),至少隐藏错误以允许“ status
”显示其输出。
那也有影响git branch
。
请参阅Jonathan Tan ( )的提交 f24c30e、提交 ec06b05、提交 a4f66a7(2020 年 9 月 1 日) 。(由Junio C Hamano 合并 -- --在提交 0df670b中,2020 年 9 月 9 日)jhowtan
gitster
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 不再指向分支。因此,在计算工作树的状态时,要容忍悬空标记。这是通过向 and 添加一个附加参数来完成
dwim_ref()
的repo_dwim_ref()
。