Git:致命的:当前分支主节点有多个上游分支,拒绝推送


68

我遇到了一个奇怪的问题,无论何时我都会git push拒绝执行任何操作:

fatal: The current branch master has multiple upstream branches, refusing to push.

当我这样做时git push -u origin master,似乎将其设置为跟踪分支:

Branch master set up to track remote branch master from origin.

但是下次我尝试时,git push它拒绝再次执行此操作。我尝试使用Google进行搜索,但问题似乎很新,因此无法找到有关此行为的任何解释。有想法吗?

更新: ./git/config

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = gitosis@xxxx.xx:milk.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

UPDATE2:以解决git config remote.origin.push HEAD出现在下面一行.git/config[remote "origin"]部分:

    push = HEAD

更新3:

$ git branch -vv
  billing      633c796 [origin/billing: behind 889] links
* master       1a0de50 [origin/master: ahead 1] more fixes
  new_master   3b880d7 [origin/new_master] branches diverged
  photo_stacks 29c8f0d [origin/photo_stacks] 1st try
  responsive   1dad980 [origin/responsive] update

$ git push
fatal: The current branch master has multiple upstream branches, refusing to push.

git 2.0?git-scm.com上的最新版本是1.8.0,我没有在git的github库中看到任何东西。
科林2012年

抱歉,对不起,git 1.8.0,dunno为什么我写了2.0
firedev

1
您的.git/config文件是什么样的,尤其是该分支的各个部分和您的来源?
twalberg 2012年

这可能对您有用,可用于git remote show origin检查本地和远程分支机构的状态,或者git branch --set-upstream-to用于重置。(根据Git v1.8.0发行说明, “ git branch --set-upstream”已弃用,并且可能会在相对遥远的将来删除。)
xhlwill

仅需注意,第一次更新中的“ ./git/config”应为“ .git / config”。
KingAndy

Answers:


121

您可能需要执行以下操作:

git config remote.origin.push HEAD

在master分支上不带任何参数的情况下推送可能会导致您出现错误消息。我不确定这是否是回归问题,还是一直如此。


谢谢,那有帮助,但是如何?我[remote "origin"]在config:的部分中看到新行push = HEAD。为什么要说师父有多个上游分支?
firedev

2
git push默认情况下,通过添加您告诉git只推送您所在的分支的配置,将所有分支推送到远程。也许您收到的错误消息是错误的,我的意思是分支名称错误(主),也许还有其他分支会导致此问题。如果以前的git版本从未遇到此问题,则可能意味着存在回归问题。
彼得·范德

几个月后,我仍然不明白为什么会这样,有些存储库不时地拒绝推送。
firedev

@Nick是的输出git branch -vv是两个v。
彼得·范德

您的主人在原点/主人后面。当您同步本地和远程主服务器git merge origin/master,删除HEAD配置git config --unset remote.origin.push并再次推送时,会发生什么?
彼得·范德

32

运行git config -l并查看是否有多行包含branch.master *引用。[branch“ master”]节可能重复了,~/.gitconfig并为我.git/config. 删除了多个~/.gitconfig上游分支检测程序。


1
我有这样的:branch.master.remote=origin branch.master.merge=refs/heads/master确实我branch "master"~/.gitconfig。删除它,将看看它如何进行,谢谢!
firedev

1
不知道它是如何发生的,但我不得不branch.master.remote=originbranch.master.merge=refs/heads/master两个完全相同的重复两次.git/config...删除重复解决这个问题。
卢卡斯

在本地重命名并将新名称推入上游后,我在一个分支上遇到了类似的问题。然后,我的.git / config文件有两个条目。就像卢卡斯(Lucas)建议的那样,删除重复项可以解决此问题。
Dev_Corps '16

10

您必须指定要推送到的分支。git push会自动尝试推送本地分支正在跟踪的所有ref和标签。服务器上的联机分支可能已经向前移动。因此,您可能最终会遇到这种情况。您应该简单地使用

git push origin master

还要协调更改,请执行以下操作:git pull用服务器上的本地引用更新本地引用。


但是我git push origin master什至使用-u了应该设置origin/mastermaster分支上游的键。无论我怎么做,下次它都会拒绝git push
firedev 2012年

尝试以其他方式再次进行git cloning或尝试以下Peter的建议
redDragonzz 2012年

3

很有可能是因为有2个或更多 branch.master.remote您的git配置中。一个来自全局git配置,另一个来自本地repo git配置。

当在git config中指定了其中的2个时,即使后一个定义应覆盖前一个,但git可以保证不承担任何一个。

您克隆的现代存储库应在本地包含配置,但您的全局git配置很有可能具有 branch.master.remote定义。

要检查是否在全局配置中进行了设置,请使用:

git config --global --list | grep branch.master

您可以branch在git全局配置中删除或注释掉该部分,您应该一切顺利。

git config --global --remove-section branch.master

这将[branch "master"]完全删除该部分。

如果您想将其保留在全局配置中以防万一,可以将其重命名为您可能不会使用的其他分支。

git config --global --rename-section branch.master branch.someothername

这样,git push在主分支上执行操作时就不会出现多个上游分支错误。

git remote show origin 也不应再发出警告。


1

好吧,在使用全新的存储库处理了两次之后,我有了一个答案。

git remote -v

git remote rm(如果添加了其他任何远程,则除了origin以外的所有内容)

git remote rm起源

!警告:多个branch.master.remote <-很好

git remote add origin git@github.com:您的名字/ yourrepo

拉+推=固定

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.