Git push origin head 在 ubuntu 18.04 上不起作用

标签 git ubuntu ubuntu-18.04

所以我是 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/

    相关文章:

    linux - 如何在 Linux 上安装和使用 GAS(GNU 编译器)?

    ubuntu - 在本地设置 super 账本 Composer 之前,我们是否需要系统上的 super 账本结构?

    node.js - IntelliJ Ultimate Yarn 需要 nodejs 4 或更高版本

    git - 当我的工作树和/或索引变脏时, "git pull"是否安全?

    来自 Visual Studio 的 git clone(使用 Git 源代码管理提供程序)

    git - 基于gitlab的composer私有(private)包被识别为git子模块

    git - 如何在 vscode 中存储 azure PAT,这样我就不必手动提供它

    php - 无法在ubuntu上安装php7

    c# - 为什么在ubuntu上构建dotnet会输出dll文件?

    java - 无法使用 JFX 在 ubuntu 上运行 jar