所以我是Windows 10用户,并且我有很多分支机构。每当我需要在分支中进行推送时,我都会使用git push origin head。
2天前,我决定尝试一下ubuntu,我很喜欢使用它。唯一的问题是git push origin head不再起作用,每次我想推送到分支时,都必须使用git push origin和该分支名称。
有什么理由吗?这不是世界末日,但我真的很想念使用head而不是键入分支名称
答案 0 :(得分:0)
始终以大写形式写HEAD
。 Git特别对待这个特定名称。它不会专门处理小写的head
。
在某些机器上有时使用小写 。特别是,它通常可以在Windows和MacOS上运行... 有时。但是,如果您使用git worktree add
并在添加的工作树中工作,它也会在Windows和MacOS上停止工作。
如果您不想长时间按住Shift键,请考虑使用@
拼写作为魔术名称。
head
(小写)为什么有时但并非总是有效 Git当前将HEAD信息(当前分支的名称)存储在名为.git/HEAD
的文件中,但在添加的工作树中除外,在该工作树中,它(按每个添加的工作树)将HEAD信息存储在文件中。 .git
的子文件夹。
当您用所有大写字母写HEAD
时,Git就会知道在适当的文件中查找HEAD
信息-无论是.git/HEAD
还是.git/worktrees/.../HEAD
或其他任何东西可能。因此可以直接获取正确的信息。
但是,当您以小写形式编写head
时,Git会尝试将其用作标签名(refs/tags/head
)或分支名称(refs/heads/head
)或远程跟踪名称,例如refs/remotes/origin/head
。该测试在某种程度上区分大小写,因为Git在两个位置存储了分支,标记和远程跟踪名称:
.git/packed-refs
的纯文本文件中,和/或.git/refs/
下,例如.git/refs/tags/head
将保存与名为head
的标签相关联的哈希ID。 .git/packed-refs
中的查找直接由Git本身完成,并且区分大小写。 .git/refs/
中的查找由操作系统完成。操作系统的查找可能不区分大小写,具体取决于所使用的操作系统和文件系统。
当然,您可能没有名为head
的标签或分支。您的遥控器可能有一个名为HEAD
的符号引用,但是在Git找到那些符号引用之前,Git 还尝试在.git
中的普通纯文本文件中查找是否有< em>那些被命名为head
。该测试再次由操作系统完成。
如果您的操作系统和文件系统组合是区分大小写的,则打开并读取名为head
的文件的请求将打开并读取显然完全不相关的名为?的文件HEAD
,那么,您将获得引用此.git/HEAD
文件的效果。因此,如果您在主工作树中,其HEAD信息位于.git/HEAD
中,则使用该名称的全小写名称head
。
这在Linux上失败,在正常的文件系统上,文件head
和文件HEAD
是两个不同的文件,其方式与“波兰擦鞋油”不是多余的方式相同。但是,它也无法在Windows和MacOS上添加工作树,因为Git仅在拼写名称HEAD
时才查找每个工作树的HEAD信息。如果您使用head
(小写),则Git的操作系统读取为.git/head
,这将为您获取 main 工作树的分支信息,而不是您的当前的工作树。