Git Push Origin Head在Ubuntu 18.04上不起作用

时间:2019-11-17 17:25:12

标签: git ubuntu ubuntu-18.04

所以我是Windows 10用户,并且我有很多分支机构。每当我需要在分支中进行推送时,我都会使用git push origin head。

2天前,我决定尝试一下ubuntu,我很喜欢使用它。唯一的问题是git push origin head不再起作用,每次我想推送到分支时,都必须使用git push origin和该分支名称。

有什么理由吗?这不是世界末日,但我真的很想念使用head而不是键入分支名称

1 个答案:

答案 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 工作树的分支信息,而不是您的当前的工作树。