所以我是 Windows 10 用户,我在很多分支机构工作。每次我需要在分支中进行推送时,我都会使用 git push origin head。
2 天前,我决定试一试 ubuntu,我很享受使用它。唯一的问题是 git push origin head 不再起作用,每次我想推送到分支时,我都必须使用 git push origin 和那个分支名称。
这有什么原因吗?这不是世界末日,但我真的很怀念使用 head 而不是输入分支名称
最佳答案
总是写 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
的标签或分支。 .您的 Remote 可能有一个名为 HEAD
的符号引用。 ,但在 Git 找到这些文件之前,Git 还会尝试在 .git
中查找普通的纯文本文件。看看是否有任何一个被命名为 head
.该测试再次由操作系统完成。如果您的操作系统和文件系统组合不区分大小写,那么请求打开和读取名为
head
的文件打开并读取名为 HEAD
的明显完全不相关的 😀 文件,那么,你得到引用这个.git/HEAD
的效果文件。因此,如果您在主工作树中,其 HEAD 信息位于 .git/HEAD
, 全小写名称 head
最终使用它。这在 Linux 上失败,普通文件系统理解文件
head
和文件 HEAD
是两个不同的文件,同理,“波兰鞋油”并不是多余的。但它在 Windows 和 MacOS 上添加的工作树也失败了,因为当您拼写名称 HEAD
时,Git 只会查找每个工作树的 HEAD 信息。 .如果您使用 head
(小写),Git 读取操作系统 .git/head
,它会为您获取主工作树的分支信息,而不是当前工作树的分支信息。
关于Git push origin head 在 ubuntu 18.04 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58903147/