2012-10-23 6 views
51

mam ten dziwny problem, gdy robię git push odmawia niczego:Git: śmiertelne: Obecny mistrz oddział posiada wiele oddziałów wydobywczych, nie chcąc naciskać

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

Kiedy zrobić git push -u origin master wydaje aby ustawić go jako śledzenia oddziału:

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

Ale następnym razem postaram git push odmawia to zrobić ponownie. Próbowałem google, ale wydaje się, że problem jest dość nowy i nie mogłem znaleźć żadnego wyjaśnienia dla tego zachowania. Pomysły?

Aktualizacja:./git/config

[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = [email protected]:milk.git 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 

Update2: rozwiązany git config remote.origin.push HEAD następujący wiersz ukazał się w .git/config do [remote "origin"] odcinku:

push = HEAD 

Update3:

$ 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. 
+0

git 2.0? Najnowsze na git-scm.com jest 1.8.0, nie widzę nic w repozytorium github dla git .. czy brakuje mi czegoś? – Collin

+0

Przepraszam, przepraszam, git 1.8.0, nie wiem dlaczego napisałem 2.0 – firedev

+1

Jak wygląda twój plik '.git/config', zwłaszcza sekcje dla tego oddziału i pochodzenia? – twalberg

Odpowiedz

87

Możesz chcieć wykonać następujące czynności:

git config remote.origin.push HEAD 

Pushing bez żadnych argumentów na gałęzi master może prowadzić do komunikatu o błędzie. Nie jestem pewien, czy to problem regresji, czy zawsze tak było.

+0

Dzięki, że pomógł, ale jak? Widzę nową linię w sekcji "[remote" origin "]' w config: 'push = HEAD'. I dlaczego mówiło, że mistrz ma wiele oddziałów upstream? – firedev

+0

'git push' domyślnie wypycha wszystkie gałęzie do zdalnego, dodając konfigurację, którą polecasz git, tylko popychając gałąź, w której się znajdujesz. Może otrzymany komunikat o błędzie jest błędny, mam na myśli to, że nazwa oddziału jest błędna (master), może są inne gałęzie, które powodują ten problem. Jeśli nigdy nie miałeś tego problemu z poprzednią wersją gita, może to oznaczać problem z regresem. –

+0

Jeszcze kilka miesięcy później nie rozumiem, dlaczego tak się dzieje, co jakiś czas niektóre repozytoria odmawiają popychania. – firedev

11

Musisz określić, do której gałęzi chcesz się spychać. git push automatycznie spróbuje przesłać wszystkie dane i znaczniki śledzone przez lokalne oddziały. Możliwe, że oddziały online na serwerze przesunęły się do przodu. Dlatego możesz skończyć z tą sytuacją. Należy po prostu użyć

git push origin master 

a także pogodzić zmiany zrobić git pull To zaktualizuje lokalne pozycje literatury z jednego z serwera.

+0

Ale zrobiłem 'git push origin master' nawet z' -u' kluczem, który powinien ustawić 'origin/master' jako upstream dla gałęzi' master'. Niezależnie od tego, jak to zrobię, następnym razem, gdy odmówi "git push" – firedev

+0

spróbuj ponownie klonowania git w innym lub spróbuj Peter's sugestie poniżej – redDragonzz

25

Run git config -l i sprawdź, czy masz wiele wierszy zawierających branch.master * referencje Sieć [oddział „master”] sekcja może być powielany ~/.gitconfig i .git/config. Usunięcie jednego w ~/.gitconfig ustalił mutiple upstream wykrywanie oddział dla mnie .

+1

Miałem to: 'branch.master.remote = origin branch.master.merge = refs/heads/master' i rzeczywiście miałem' branch "master" 'in' ~/.gitconfig". Usunięto, zobaczę, jak to działa, dzięki! – firedev

+1

Nie jestem pewien jak to się stało, ale miałem 'branch.master.remote = origin' i' branch.master.merge = refs/heads/master' oba _exactly_ powtórzono dwa razy w '.git/config' ... Usuwanie duplikatów rozwiązano ten problem. – Lucas

+0

Skończyłem z podobnym problemem w jednym z moich oddziałów po zmianie jego nazwy na lokalną i wypychaniu nowej nazwy w górę strumienia. Mój plik .git/config miał wtedy dwa wpisy. I tak, jak sugerował Lucas, usunięcie duplikatu rozwiązuje to. –

1

W porządku, po tym, jak mam do czynienia z tym dwa razy z nowymi repo, mam odpowiedź.

git remote -v

git remote rm (wszystko inne niż pochodzenia, jeśli dodasz jakieś inne piloty)

pochodzenie git remote rm

! ostrzeżenie: więcej niż jeden branch.master.zdalny < - to dobry

git remote add origin [email protected]: YourName/yourrepo

przyciąganie + impuls = FIXED