您的配置指定与远程的<branch name>合并,但是没有提取这样的ref.

Far*_*hti 154 git branch pull bitbucket tortoisegit

我得到这个错误拉:

您的配置指定从遥控器与ref'refs/heads/feature/Sprint4/ABC-123-Branch'合并,但没有提取此类参考.

任何其他分支都不会出现此错误.
关于这个分支的特殊之处在于它是从另一个分支的先前提交创建的.

我的配置文件如下:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = <url here>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "new-develop"]
    remote = origin
    merge = refs/heads/new-develop
[branch "feature/Sprint4/ABC-123-Branch"]
    remote = origin
    merge = refs/heads/feature/Sprint4/ABC-123-Branch
Run Code Online (Sandbox Code Playgroud)

tor*_*rek 104

这意味着什么

你的上游 - 你所呼叫的遥控器origin- 不再拥有,或者从来没有(仅从这些信息中无法分辨)一个名为的分支feature/Sprint4/ABC-123-Branch.有一个特别常见的原因:有人(可能不是你,或者你记得)删除了其他Git存储库中的分支.

该怎么办

这取决于你想要什么.请参阅下面的讨论部分.您可以:

  • 在遥控器上创建或重新创建分支,或
  • 删除您的本地分支,或
  • 你能想到的任何其他事情.

讨论

您必须正在运行git pull(如果您正在运行,git merge您将收到不同的错误消息,或根本没有错误消息).

当你运行时git fetch,你的Git会根据你配置部分中的url一行联系另一个Git [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]
Run Code Online (Sandbox Code Playgroud)

refs/heads/条目列出所有的遥控器上存在的分支,1与相应的ID提交沿(对于refs/tags/条目的ID可以指向标签对象,而不是提交).

您的Git将获取每个分支名称,并根据同一部分中的行进行更改.在这种情况下,你的Git替代用,例如.你的Git会对每个遇到的分支名称执行此操作.fetchremoterefs/heads/masterrefs/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好吧,它至少会承认所有这一切.但除非他们专门隐藏了一些引用,否则列表中包含所有内容.

  • 要删除本地存储库中不存在的远程分支引用,请使用`git remote prune origin` (7认同)
  • @JonathanBenn:您可以使用 `gitbranch --set-upstream-to=origin/master master` 来切换本地 `master` 的上游设置。删除并重新创建有一个副作用(假设您使用 DWIM 风格的 `git checkout master` 来创建它),还有一个额外的副作用,即强制您的 `master` 与您的 `origin/master` 匹配。 (7认同)
  • @Ben-Uri:是的,或者,运行`git fetch --prune origin`,或者在你的配置中将`fetch.prune` 设置为`true`(所有三个都旨在做同样的事情,尽管在几个版本中Git 其中一些不太可靠)。 (2认同)
  • 啊!我遇到了这个。github项目改名为master分支main! (2认同)

Ext*_*me 48

如果您/某人重命名了分支,也会发生这种情况.因此,请按照以下步骤操作(如果您知道重命名了分支名称)假设先前的分支名称为,wrong-branch-name并且有人将其重命名为correct-branch-nameSo.

git checkout correct-branch-name
Run Code Online (Sandbox Code Playgroud)

git pull (你会看到这个"你的配置指定..")

git branch --unset-upstream
Run Code Online (Sandbox Code Playgroud)

git push --set-upstream origin correct-branch-name

git pull (你不会得到更早的消息)

  • 上面设置upstream的命令是错误的。在 --unset-upstream 操作之后执行 git pull ,在 pull 的输出中可以看到一个错误,使用命令设置上游,如下所示, gitbranch --set-upstream-to=origin/&lt;branch &gt; 我的分支机构 (10认同)
  • 甚至不需要“git push”,并且如果当前分支位于其远程后面,它将无法工作。`git pull origin Correct-branch-name` 就足够了。 (6认同)
  • 魔术是```git branch --unset-upstream``` (3认同)
  • 唯一有效的答案 (3认同)
  • 对于最近访问此的任何人:不再支持“--set-upstream”。现在你应该使用“gitbranch --set-upstream-to=origin/&lt;branch&gt; main” (2认同)

Mal*_*abi 37

检查您的远程分支是否可用.我有同样的问题,终于意识到远程分支被某人删除了.

  • 对我来说也一样! (4认同)
  • 在请求请求之后,合并(即执行合并的人员)可以选择删除已合并到目标分支中的分支。如果您尝试在此时拉,则会收到此错误。 (3认同)

nea*_*mcb 15

这是一个比较常见的错误,现在因为很多项目正在将他们的master分支到其他名称,如mainprimarydefaultrootreferencelatest,等,如在讨论Github上计划更换种族不敏感的术语如“主”和“白名单”

要修复它,首先要找出项目正在使用的内容,您可以通过他们的 github、gitlab 或其他 git 服务器找到。

然后执行此操作以捕获当前配置:

$ git branch -vv
...
* master  968695b [origin/master] Track which contest a ballot was sampled for (#629)
...
Run Code Online (Sandbox Code Playgroud)

找到描述master分支的行,并注意远程仓库是否被调用originupstream或者其他什么。

然后使用该信息,将分支名称更改为新的分支名称,例如,如果它说您当前正在跟踪origin/master,请替换main

git branch master --set-upstream-to origin/main
Run Code Online (Sandbox Code Playgroud)

您还可以重命名自己的分支以避免将来混淆:

git branch -m main
Run Code Online (Sandbox Code Playgroud)


use*_*134 7

当实际原因是我的磁盘已满时,我遇到了类似的错误。删除一些文件后,git pull开始按我的预期工作。


Nic*_*zzi 7

在我的情况下,我只是缺乏远程分支上的初始提交,所以本地分支没有找到任何要拉的东西,它给出了错误消息。

我做了:

git commit -m 'first commit' // on remote branch
git pull // on local branch
Run Code Online (Sandbox Code Playgroud)


Gen*_*-ua 7

您可以通过运行以下命令轻松地将本地分支与远程分支链接起来:

git checkout <your-local-branch>
git branch --set-upstream-to=origin/<correct-remote-branch> <your-local-branch>
git pull
Run Code Online (Sandbox Code Playgroud)


Joh*_*tah 6

我发现当从默认分支master已重命名为 的存储库中提取更新时,经常会发生此错误mainmaster在2020年分支更名的趋势之后,遇到了很多这种情况main

因此,如果您之前使用默认分支克隆了一个存储master库,并且该分支已重命名为main,则解决方法之一是将上游从 master 指向 main:

git branch --set-upstream-to=origin/main master

如果该命令成功,您应该看到如下消息:

分支“master”设置为从“origin”跟踪远程分支“main”。

然后,您可以将本地分支从master重命名为main(以与远程分支名称保持一致)git branch -m master main


小智 5

对我来说,这是一个区分大小写的问题。我的本地分支是Version_feature2,而不是Version_Feature2。我使用正确的大小写重新检查了我的分支,然后git pull工作了。

  • 事实证明这也是我的问题。相当长/复杂的分支名称不一定很明显。 (2认同)

akg*_*pta 5

当原始分支名称存在大小写问题时,也可能会收到此错误。

例如:origin分支为team1-Team,而本地分支的结帐为team1-team。然后,这T-Teamt-team能引起这样的错误。以我为例。因此,通过使用origin分支的名称更改本地名称,可以解决错误。


小智 5

我对 master/main 分支也有类似的问题。就我而言,我的硬盘上没有足够的可用空间。释放一些空间后,它起作用了。

我认为这是因为文件 /.git 需要一些空间来编辑其文件。例如文件:'refs/heads/feature/Sprint4/ABC-123-Branch'