这是什么意思
您的上游(即您呼叫的远程origin
站点)不再具有,或者可能从未拥有(不可能仅从此信息中得知)一个名为的分支feature/Sprint4/ABC-123-Branch
。有一个特别普遍的原因:有人(可能不是您,或者您会记得)删除了另一个Git存储库中的分支。
该怎么办
这取决于您想要什么。请参阅下面的讨论部分。您可以:
- 在远程上创建或重新创建分支,或者
- 删除您的本地分支,或
- 您能想到的其他任何东西。
讨论区
您必须正在运行git pull
(如果正在运行git merge
,则会收到其他错误消息,或者根本没有错误消息)。
当您运行时git fetch
,您的Git将url
根据[remote "origin"]
您配置部分下面的内容与另一个Git联系。这混帐运行一个命令(upload-pack
),除其他事项外,将您的 Git的所有分支的列表。您可以git ls-remote
用来查看其工作原理(尝试一下,这是有教育意义的)。这是我自己在Git存储库上运行时得到的代码片段git
:
$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1 refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6 refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638 refs/heads/todo
[snip]
这些refs/heads/
条目列出了存在于远程服务器上的所有分支1以及相应的提交ID(对于refs/tags/
条目,这些ID可能指向标记对象而不是提交)。
您的Git会获取每个分支名称,并根据同一部分中的行进行更改。在这种情况下,你的Git替代用,例如。您的Git使用遇到的每个分支名称来执行此操作。fetch
remote
refs/heads/master
refs/remotes/origin/master
它还将原始名称记录在特殊文件中FETCH_HEAD
(如果您查看自己的.git
目录,则可以看到此文件)。此文件保存获取的名称和ID。
该git pull
命令是为了方便快捷:它git fetch
在适当的远程上运行,然后git merge
(如指示git rebase
)使用所需的参数(如本[branch ...]
节所述)合并(或变基)。在这种情况下,您的[branch "feature/Sprint4/ABC-123-Branch"]
部分说要从中获取origin
,然后与在名称下找到的ID合并refs/heads/feature/Sprint4/ABC-123-Branch
。
由于没有发现该名称,因此git pull
抱怨并停止。
如果将其作为两个单独的步骤运行,git fetch
然后再执行git merge
(或git rebase
)操作,则Git会查看您缓存的remotes/origin/
远程跟踪分支,以查看要与之合并或以其为基础的内容。如果是在同一时间这样的一个分支,你仍然可以拥有远程跟踪分支。在这种情况下,您不会收到错误消息。如果从来没有这样的分支,或者如果您git fetch
使用过它--prune
(它删除了无效的远程跟踪分支),那么您就没有相应的远程跟踪分支,您会收到投诉,但会引用它origin/feature/Sprint4/ABC-123-Branch
。
无论哪种情况,我们都可以得出结论,feature/Sprint4/ABC-123-Branch
在名为的远程上现在不存在origin
。
它可能确实存在一次,并且您可能是从远程跟踪分支创建了本地分支。如果是这样,您可能仍然具有远程跟踪分支。您可能会进行调查,以了解谁从远程站点删除了该分支机构,以及原因,或者您可能只是推送了一些内容以重新创建它,或者删除了远程跟踪分支机构和/或本地分支机构。
1好吧,至少它要接受的所有内容。但是除非他们特别隐藏了一些引用,否则列表将包括所有内容。