我知道,用Git的说法,"分离了HEAD"对应于符号引用HEAD
未指向任何分支的状态。我也知道git branch
会告诉我我是否处于分离-HEAD状态,例如。
* (detached from 9a2ef02)
master
与否,例如
* master
但是,我想知道是否有办法让git log --decorate
完全明确的输出关于我是否处于分离-HEAD状态或不。这是一个例子来解释我的意思"明确的"。
说我master
,我的历史记录如下:
4d860e9 (HEAD, master) Remove trailing whitespace
9a2ef02 Correct typo in header
f0badb5 Add to-do section to README
如果我跑
git checkout 9a2ef02
然后git log --decorate --oneline
的输出是
9a2ef02 (HEAD) Correct typo in header
f0badb5 Add to-do section to README
由于此输出中HEAD
旁边没有列出分支引用,因此我确信我已经找到了分离的HEAD。
但是,如果我跑
git checkout 4d860e9
然后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
因为它与我master
时的情况完全相同。
有没有办法通过一些git log
选项来消除这种歧义?我还没有在git-log
手册页中找到方法......
答案 0 :(得分:4)
使用Git 2.4 +(2015年第二季度),git log --decorate
将显示与HEAD相关的确切分支(或缺少它,对于分离的HEAD)。
commit 51ff0f2见Junio C Hamano (gitster
):
装饰
log
:使用分支名称HEAD
目前,日志装饰并不表示签出了哪个分支 以及
HEAD
是否已分离。检出分支
foo
时,将装饰的“HEAD, foo
”部分更改为“HEAD -> foo
”。这用于指示ref装饰(由间距帮助)以及它们的关系。因此,“
HEAD
”没有任何“->
”表示已分离HEAD
现在。
这意味着the 2.4 release notes现在包含以下向后兼容性警告:
用户格式“
git log --decorate
”参数“%d
”命令系列中使用的“--format=<string>
”(和“git log
”格式说明符的输出用于列出“HEAD
”就像分支名称的其他提示一样,用逗号分隔。 E.g。
$ git log --decorate -1 master
commit bdb0f6788fa5e3cacc4315e9ff318a27b2676ff4 (HEAD, master)
...
当HEAD引用分支的尖端时,此版本稍微更新输出,分支的名称也显示在输出中 以上显示为:
$ git log --decorate -1 master
commit bdb0f6788fa5e3cacc4315e9ff318a27b2676ff4 (HEAD -> master)
...
答案 1 :(得分:2)
不幸的是,没有。我一直希望git log
--decorate
使用我的HEAD=
语法。如果确实如此,你会得到:
4d860e9 (HEAD, master) Remove trailing whitespace
9a2ef02 Correct typo in header
f0badb5 Add to-do section to README
当你把头放在胳膊下时:
但你会得到这个:
4d860e9 (HEAD=master) Remove trailing whitespace
9a2ef02 Correct typo in header
f0badb5 Add to-do section to README
当你没有处于神圣模式时。