我正在尝试了解git log命令的输出。通常,我看到HEAD指向特定分支,但是当HEAD似乎指向本地分支和远程分支(HEAD->分支,起源/分支)时,我感到困惑。
我尝试在网络上搜索答案,但我什至不确定如何写问题以及确实显示的结果与之无关。
git log
commit 3b64cc50d6fe262d007853774689e8ad58e0f2ae (HEAD -> internal-env-board-david-fix, origin/internal-env-board-david-fix)
Author: user <user_email>
Date: Some_Date
Added build flag to platform.ini file: -D UAVCAN_CPP_VERSION=UAVCAN_CPP11
如上所述,当我运行git log
时,我不知道(HEAD -> internal-env-board-david-fix, origin/internal-env-board-david-fix)
是什么意思。通常,head只指向一个分支,而出于某种原因,这里似乎指向本地分支和远程分支。知道为什么吗?
答案 0 :(得分:4)
Git如何知道您当前在哪个分支?它保留了一个称为HEAD的特殊指针。...在Git中,这是指向您当前所在的本地分支的指针。在这种情况下,您仍在掌握知识。
HEAD指向特定分支,但是git log
命令还向您显示远程分支相对于本地分支的位置。在这种情况下,两个分支在同一提交时对齐。并非总是如此。 chapter 3中的图表已很好地描述了所有这些内容。
答案 1 :(得分:0)
(HEAD -> internal-env-board-david-fix, origin/internal-env-board-david-fix)
是主要由--decorate[=short|full|auto|no]
控制的输出。输出的意思是“显示的所有提交的引用名称”。如果未给出,则默认使用--decorate=short
。要隐藏输出,请使用--no-decorate
。要过滤输出,请使用--decorate-refs=<pattern>
和--decorate-refs-exclude=<pattern>
。要找出所有这些引用,我们可以使用git for-each-ref --points-at=<commit>
。
对于您而言,origin/internal-env-board-david-fix
与HEAD
没有直接关系。 internal-env-board-david-fix
和origin/internal-env-board-david-fix
都直接指向3b64cc50d6fe262d007853774689e8ad58e0f2ae
,而HEAD
仅指向internal-env-board-david-fix
。换句话说,HEAD
间接指向3b64cc50d6fe262d007853774689e8ad58e0f2ae
。符号->
表示间接寻址。使用cat .git/HEAD
,它会打印ref: refs/heads/internal-env-board-david-fix
。
HEAD--->internal-env-board-david-fix--->3b64cc50d6fe262d007853774689e8ad58e0f2ae
origin/internal-env-board-david-fix------^
如果我们运行git checkout 3b64cc50d6fe262d007853774689e8ad58e0f2ae
进入分离的HEAD状态,则装饰将为(HEAD, internal-env-board-david-fix, origin/internal-env-board-david-fix)
,符号->
消失了。 .git/HEAD
的内容将变为3b64cc50d6fe262d007853774689e8ad58e0f2ae
。现在HEAD
和其他两个分支都直接指向3b64cc50d6fe262d007853774689e8ad58e0f2ae
。
HEAD--->3b64cc50d6fe262d007853774689e8ad58e0f2ae
internal-env-board-david-fix-----^ ^
origin/internal-env-board-david-fix---|