为什么git使用2个不同的命令来显示HEAD?

smw*_*dia 3 git

我注意到有2个HEAD:

  • git的\ HEAD
  • git的\裁判\遥控器\产地\ HEAD

当我使用时git show-ref HEAD,它只给我这个:

ce0762c073b407d794f54f0b5d2a50375fdcb609 refs/remotes/origin/HEAD
Run Code Online (Sandbox Code Playgroud)

当我使用git rev-parse HEAD它时,它给了我.git\HEAD的值:

a758e523fe40e799194878bac567b7f4b8eec2b9
Run Code Online (Sandbox Code Playgroud)

为什么Git使用2个不同的命令来显示HEAD?任何有力的理由?

Sch*_*ern 5

git-show-ref显示存储库中的引用列表及其提交ID.应该叫它git-show-refs.它比直接引用目录中的文件更.git受欢迎.

当你说git show-ref HEAD你不要求时HEAD.您要求的是列表中与模式匹配的任何引用HEAD.HEAD本身通常被过滤掉了,所以你得到了refs/remotes/origin/HEAD.您可以包括HEAD--head.

$ git show-ref --head HEAD
f37beeea95f3b0e6b064f6d4b5f835a058e0568c HEAD
aa1124b89f38eed793e2b9f2d2b2ba5d80a27a20 refs/remotes/origin/HEAD
Run Code Online (Sandbox Code Playgroud)

所以你不应该用它git show-ref <ref>来查找引用.


git-rev-parse获取修订参数并返回提交ID.它旨在处理您可以引用提交的无数不同方式.例如...

$ git rev-parse --verify master
aa1124b89f38eed793e2b9f2d2b2ba5d80a27a20
$ git rev-parse --verify heads/master
aa1124b89f38eed793e2b9f2d2b2ba5d80a27a20
$ git rev-parse --verify refs/heads/master
aa1124b89f38eed793e2b9f2d2b2ba5d80a27a20
Run Code Online (Sandbox Code Playgroud)

git rev-parse --verify <ref> 是你应该用来查找引用的提交ID.