您的配置指定与远程的<分支名称>合并,但没有获取到此类引用?

540

我在pull时遇到了以下错误:

你的配置指定要与远程引用'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

9
当远程分支被删除时,可能会出现这个问题。请仔细核对它是否真的存在。 - Benny Code
24
未来的读者:如果你知道远程分支存在,请检查你是否忽略了大小写。我曾经设置了一个本地分支来跟踪一个远程分支,但是我把远程分支的名称都用小写字母输入了。只需要重新配置本地分支跟踪 origin/BranchName 而不是 origin/branchname 即可。 - Jerreck
2
在涉及修剪本地分支以匹配远程的解决方案时,首先确保您实际上并未在本地删除该分支,特别是您没有在该分支上进行未提交的更改。 - M Katz
2
已经有很好的答案了,所以不需要再添加新的答案。但是我想说一句,当我收到这个消息时,意味着源分支已被删除,通常是因为在合并到另一个分支时被删除。这是一种常见的做法,可以使源存储库不受旧分支的干扰。 - angryITguy
2
正如@angryITguy所提到的,原因很可能是当分支合并到master时被删除了(为了保持整洁)。例如,gitlab在合并页面上通过一个复选框鼓励这样做。您可以在https://dev59.com/OHVC5IYBdhLWcg3wpS3f查看分支是否已经合并。因此,使用git branch --merged master命令。如果确实已经合并,则可以使用git branch --set-upstream-to=origin/master清除“错误”消息。 - Michael Shaw
显示剩余3条评论
36个回答

1

只需检查是否有人在远程删除了分支。


1
  1. 重命名本地分支
git branch -m temp
  1. 显示所有分支
git branch -a
  1. 检查特定的远程分支
git checkout main
  1. 删除临时分支
git branch -d temp

0

我曾经遇到过同样的问题,我的当前分支是dev,我要切换到MR分支并在此之后执行git pull。我采取的一个简单的解决方法是创建一个新文件夹用于MR分支,并在那里执行git pull,然后再进行git clone。

因此,基本上我维护了不同的文件夹来推送代码到不同的分支。


0

我曾经遇到过这个确切的错误,但是建议的答案(可能是大小写敏感性)都不是问题所在。它们可能适用于99%的问题,但仍然有1%。

事实证明,混合使用WSL / Linux文件共享和Windows基本目录是问题所在。我正在运行WSL(Ubuntu 20.04),并且有一个从Windows访问/编辑的存储库,但代码在WSL上运行。我可能已经从WSL端执行了一些git状态检查。

存储库存在,大小写正确,互联网工作正常,没有删除任何分支等。但我还是收到了错误消息“Your configuration specifies to merge with the from the remote, but no such ref was fetched.”

我的解决方法是确保所有项目都被推送/所有更改都被记录,然后我只需从Windows中删除该目录并再次使用“git clone”即可。然后“git checkout”就可以正常工作了。我意识到这并不是真正的答案,但它确实有效。

我正在进行Linux开发,其中一个代码库自动化了某些操作,包括“git clone”; 然而,我通常从Windows推送我的代码。 我猜测.git文件夹不是跨平台兼容的(虽然我没有任何期望)。 然而,它通常可以工作。 这是一个错误吗?有争议。

git有时也会尝试过度友好地混合行结尾; 这是另一个问题(接近宗教。我是不可知论者。是的,有一个设置。)


0

0

在使用yarn安装软件包时,我遇到了问题。一个依赖项将分支main重命名为master。仅更新依赖项上游并不能解决问题,我还需要清除yarn缓存。

  1. 项目A将主分支(main -> master)重命名。项目A是项目B的依赖项。

  2. 在项目B上运行yarn install<--导致错误

  3. 推送更新的上游在项目A上

  4. 在项目B上运行yarn install<--导致错误

  5. yarn cache clean

  6. 在项目B上运行yarn install<--现在可以正常工作了


0
在我的情况下,该仓库是暂时不可用的(正在维护中)。

0

如果另一个拉取动作正常运行,那就意味着你的网络没有连接。


3
有一些负面评价,但这是我遇到的导致错误的原因。我有互联网连接,但失去了访问git服务器的VPN。重新连接VPN后,拉取操作就正常工作了。 - Ben Thurley

0

您可以在家目录下编辑~/.gitconfig文件。这是保存所有全局设置的地方。

或者,使用git config --global --unset-all remote.origin.url,然后使用存储库URL运行git fetch


0

还有可能是在克隆存储库时GitLab存储库中的权限已经丢失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接