git - 您的配置指定与远程的 <branch name> merge ,但未获取此类引用。?

标签 git branch bitbucket tortoisegit pull

我收到这个错误 pull :

Your configuration specifies to merge with the ref 'refs/heads/feature/Sprint4/ABC-123-Branch' from the remote, but no such ref was fetched.



这个错误不会出现在任何其他分支上。这个分支的特殊之处在于它是从另一个分支的先前提交中创建的。
我的配置文件看起来像:
[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

最佳答案

这意味着什么
您的上游——您调用的远程 origin — 不再有,或者可能从未有过(仅凭这些信息无法判断)名为 feature/Sprint4/ABC-123-Branch 的分支.有一个特别常见的原因:有人(可能不是你,或者你记得)删除了另一个 Git 存储库中的分支。
该怎么办
这取决于你想要什么。请参阅下面的讨论部分。你可以:

  • 在远程创建或重新创建分支,或
  • 删除您的本地分支,或
  • 任何你能想到的。

  • 讨论
    您必须正在运行 git pull (如果您正在运行 git merge,您将收到不同的错误消息,或者根本没有错误消息)。
    当您运行时 git fetch ,你的 Git 联系另一个 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 使用这些分支名称中的每一个,并根据 fetch 对其进行更改。同一行 remote部分。在这种情况下,您的 Git 将替换 refs/heads/masterrefs/remotes/origin/master , 例如。您的 Git 会使用遇到的每个分支名称执行此操作。
    它还在特殊文件FETCH_HEAD中记录了原始名称。 (如果您查看自己的 .git 目录,就可以看到此文件)。此文件保存获取的名称和 ID。git pull命令是一种方便的快捷方式:它运行 git fetch在适当的 Remote 上,然后 git merge (或者,如果有指示, git rebase )以及按照 [branch ...] 的指示 merge (或 rebase )所需的任何参数部分。在这种情况下,您的 [branch "feature/Sprint4/ABC-123-Branch"]部分说从 origin 获取,然后与在名称 refs/heads/feature/Sprint4/ABC-123-Branch 下找到的任何 ID merge .
    由于在该名称下没有发现任何内容,git pull提示和停止。
    如果您将其作为两个单独的步骤运行,git fetch然后 git merge (或 git rebase),你的 Git 会查看你缓存的 remotes/origin/远程跟踪分支以查看要 merge 或 rebase 的内容。如果曾经有这样一个分支,你可能仍然有远程跟踪分支。在这种情况下,您不会收到错误消息。如果从来没有这样的分支,或者如果你运行了 git fetch--prune (删除死的远程跟踪分支),因此您没有相应的远程跟踪分支,您会收到投诉,但它会引用origin/feature/Sprint4/ABC-123-Branch反而。
    无论哪种情况 ,我们可以得出结论 feature/Sprint4/ABC-123-Branch现在在名为 origin 的远程服务器上不存在.
    它可能曾经存在过,并且您可能从远程跟踪分支创建了本地分支。如果是这样,您可能仍然拥有远程跟踪分支。您可能会调查以查看谁从远程删除了分支以及原因,或者您可能只是推送某些内容来重新创建它,或者删除您的远程跟踪分支和/或您的本地分支。

    1好吧,至少它会承认所有这些。但是除非他们特别 stash 了一些引用文献,否则该列表包含所有内容。
    2020 年 7 月编辑:有一个新的 fetch 协议(protocol)可以避免列出所有内容,只列出 Git 说它要查找的名称。这可以帮助具有大量分支和/或标签的存储库。但是,如果您的 Git 对所有可能的名称感兴趣,您仍然会在此处获得所有名称。

    关于git - 您的配置指定与远程的 <branch name> merge ,但未获取此类引用。?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36984371/

    相关文章:

    git - Gitosis 可以强制执行正确的用户名/电子邮件吗?

    git - 使用 CloudFormation 在 CodeCommit 存储库中上传/创建文件

    git - 无法解决 PR​​ 中的 GitHub 冲突

    带有 pexpect 的 Git 命令 : Terminal not fully functional

    c# - 如何比较更改的表单文件 - ( .Designer InitializeComponent )

    git - 您的 BitBucket 帐户可以有多少空间?

    java - Java 代码主体中的 URL 不会引发编译错误

    git - 事件分支数量的最佳范围是多少?

    azure - BitBucket 的 Microsoft Azure Web App 发布停止工作

    node.js - yarn 包管理器 : install dependencies from private Bitbucket repository