首页 > 解决方案 > git pull whackiness,无法删除远程分支

问题描述

我一直在运行 git pull 它一直在吐出同样的东西

Deans-MacBook-Pro:orderly dean$ git pull
        From github.com:OrderlyHealth/orderly
        - [deleted]         (none)     -> origin/asyncreview_Declan/CleanupReadAPI
        - [deleted]         (none)     -> origin/asyncreview_Declan/DataApiClientRemoved
        - [deleted]         (none)     -> origin/asyncreview_Declan/LinkAPIToProviderService
        - [deleted]         (none)     -> origin/asyncreview_Declan/LinkingReadApi
        - [deleted]         (none)     -> origin/asyncreview_Declan/MultiStreamAndWeirdJsonError
        - [deleted]         (none)     -> origin/asyncreview_Declan/MultiStreaming
        - [deleted]         (none)     -> origin/asyncreview_Declan/MultiStreamingFinished
        - [deleted]         (none)     -> origin/asyncreview_Declan/RefactoringIntToLong

我一直在尝试删除分支,但是说它们不存在是行不通的。我最终陷入了一个循环。我什至从另一篇文章中做了一个 git fetch --prune 并且 git branch -r 仍然列出了可能被删除的分支,或者至少在我删除它们时,它说它们不存在。

        Deans-MacBook-Pro:orderly dean$ ls -la .git/refs/remotes/origin/
        total 16
        drwxr-xr-x  4 dean  staff  128 Jun  3 13:40 .
        drwxr-xr-x  3 dean  staff   96 Jan 30 10:59 ..
        -rw-r--r--  1 dean  staff   32 Jan 30 10:59 HEAD
        -rw-r--r--  1 dean  staff   41 Jun  3 13:25 master

我尝试删除一个说它存在的分支

        Deans-MacBook-Pro:orderly dean$ git branch -r | grep asyncreview_Declan/CleanupReadAPI
        origin/asyncreview_Declan/CleanupReadAPI
        Deans-MacBook-Pro:orderly dean$
        Deans-MacBook-Pro:orderly dean$
        Deans-MacBook-Pro:orderly dean$ git push origin --delete asyncreview_Declan/CleanupReadAPI
        error: unable to delete 'asyncreview_Declan/CleanupReadAPI': remote ref does not exist
        error: failed to push some refs to 'git@github.com:OrderlyHealth/orderly.git'

标签: git

解决方案


根据您的评论,我将提出这个答案。

标准的 MacOS 文件系统设置也像 Windows 一样进行大小写折叠。也就是说,如果您创建一个文件ReadMe.txt并尝试打开README.TXT,您将得到相同的文件。这会影响一些Git 引用:特别是那些被解压缩到单个文件中的引用。它不会影响剩余的 Git 引用。结果可能有点奇怪。但是,真正奇怪的是,如果您反复得到上述内容。如果你只看过一次,那是 Git 的自我纠正。

至于有人如何在 GitHub 上创建它们,这很容易。当您运行时,git push您可以向其他 Git 指定您希望他们创建或更新的名称。例如,使用存储在您自己的分支名称中的相同哈希 IDgit push origin master:newbranch创建一个newbranch在另一个 Git 中命名的分支(GitHub 上的那个分支branch)。请注意,您的分支名称甚至永远不会传递到 GitHub:他们只会看到您要求他们创建或更新的分支名称,在这种情况下newbranch,以及哈希 ID。

GitHub 服务器运行 Linux 并以大写和小写完全不同的形式存储名称,因此它们可以有 amaster和 a Master,例如,您的 Git 将尝试将它们存储为 yourorigin/master your origin/Master. 当引用被打包时,这在您的 Mac 上有效,但在解压时无法正常工作:您得到一个 origin/master origin/Master,但不能同时得到两者。如果有人随后删除了MasterGitHub 上的虚假内容,您git fetch --prune将删除您的origin/Master. 如果 refs 被解包,这最终会删除两者origin/masterorigin/Master因为它们都占用一个文件。随后git fetch恢复丢失的origin/master,之后一切正常。

无法说出创建错误案例名称分支的人使用的确切命令;我们只知道后遗症。


推荐阅读