"结账头"是做什么的?

Das*_*ter 7 git

出于好奇,我尝试了以下方法:

git checkout head
Run Code Online (Sandbox Code Playgroud)

我得到了这个:

$ git checkout head
Note: checking out 'head'.
You are in 'detached HEAD' state.

Me@MyPC /c/repo ((9da1bd7...))
$
Run Code Online (Sandbox Code Playgroud)

git checkout HEAD
Run Code Online (Sandbox Code Playgroud)

什么都不做(如预期的那样).那么前命令究竟在做什么呢?

更多信息:是的,我在Windows上.据我所知,它没有创建标签或分支:

Me@MyPC /c/repo ((9da1bd7...))
$ git log -n 1
commit 9da1bd740434923ae55ca1b50efb7c62eb6e0c35
Author: someone else
Date:   Fri Dec 6 15:44:08 2013 +0100

Me@MyPC /c/repo ((9da1bd7...))
$ git tag -l
TestRelease

Me@MyPC /c/repo ((9da1bd7...))
$ git branch -l
* (detached from head)
  master
Run Code Online (Sandbox Code Playgroud)

小智 6

https://github.com/git/git/blob/ad7044857660af7ffaaf8fbbccc77b817d1b938f/builtin/checkout.c#L624,字符串"HEAD"是特殊的,作为无操作,带有strcmp(区分大小写).在git系统的其他地方,有些东西checkout会将参数解析为不区分大小写(或者将其查找为文件名,使其可能不区分大小写,具体取决于文件系统).

  • 对...你问`head`所以它寻找`.git/head`(以及其他东西)并成功,因为`.git/HEAD`存在而Windows无法区分.然后git认为它已经成功打开了一个*不被称为"HEAD"的文件,也不是一个分支(因为它没有在`.git/refs/heads`中找到)所以它对待它就像任何一样其他非特殊非分支结账. (2认同)