可以git log --decorate明确告诉我HEAD是否已分离?

jub*_*0bs 6 git git-log git-detached-head

我知道,在Git的说法中,"分离的HEAD"对应于符号引用HEAD未指向任何分支的状态.我也知道git branch,例如,会告诉我我是否处于分离-HEAD状态,例如

* (detached from 9a2ef02)
  master
Run Code Online (Sandbox Code Playgroud)

或不,例如

* master
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有办法使输出git log --decorate完全明确,我是否处于分离-HEAD状态.这是一个用"明确的"来解释我的意思的例子.

在此输入图像描述

说我在master,我的历史看起来如下:

4d860e9 (HEAD, master) Remove trailing whitespace
9a2ef02 Correct typo in header
f0badb5 Add to-do section to README
Run Code Online (Sandbox Code Playgroud)

案例1:明确的分离-HEAD状态

如果我跑

git checkout 9a2ef02
Run Code Online (Sandbox Code Playgroud)

那么输出git log --decorate --oneline就是

9a2ef02 (HEAD) Correct typo in header
f0badb5 Add to-do section to README
Run Code Online (Sandbox Code Playgroud)

因为HEAD此输出旁边没有列出分支引用,所以我确信我有一个分离的HEAD.

案例2:unached-HEAD状态与否?

但是,如果我跑

git checkout 4d860e9
Run Code Online (Sandbox Code Playgroud)

然后HEAD不指向master,但直接提交4d860e9,这master也指向; 我有一个独立的HEAD.但是,从输出中无法判断git log --decorate --oneline,

4d860e9 (HEAD, master) Remove trailing whitespace
9a2ef02 Correct typo in header
f0badb5 Add to-do section to README
Run Code Online (Sandbox Code Playgroud)

因为它和我上场时完全一样master.

有没有办法,通过一些git log选项,消除这种模糊性?我在git-log手册页中找不到方法......

Von*_*onC 4

使用 Git 2.4+(2015 年第 2 季度),git log --decorate将显示与 HEAD 关联的确切分支(或者对于分离的 HEAD 则缺少分支)。

请参阅Junio C Hamano提交 51ff0f2 ( )gitster

log:HEAD用分支名称装饰

目前,日志装饰不指示哪个分支被签出以及是否HEAD被分离。

当分支foo被签出时,将HEAD, foo装饰的“ ”部分更改为“ HEAD -> foo”。这用于指示两个参考装饰(通过间距帮助)以及它们的关系。

因此,“ HEAD”没有任何“ ”表示现在->是分离的HEAD


这意味着2.4 发行说明现在包含以下向后兼容性警告

“ ” 的输出git log --decorate(以及%d用户格式“ ”--format=<string>参数“ git log”命令系列中使用的“ ”格式说明符)用于列出“ HEAD”,就像分支名称的其他提示一样,之间用逗号分隔。例如

$ git log --decorate -1 master
commit bdb0f6788fa5e3cacc4315e9ff318a27b2676ff4 (HEAD, master)
...
Run Code Online (Sandbox Code Playgroud)

当 HEAD 引用其名称也显示在输出中的分支的尖端时,此版本会稍微更新输出。
上图显示为:

$ git log --decorate -1 master
commit bdb0f6788fa5e3cacc4315e9ff318a27b2676ff4 (HEAD -> master)
...
Run Code Online (Sandbox Code Playgroud)