Wiadomość „src refspec master nie pasuje do żadnej” podczas wypychania zatwierdzeń w Git

2687

Klonuję moje repozytorium za pomocą:

git clone ssh://xxxxx/xx.git 

Ale po tym, jak zmienić niektóre pliki i addi commitim chcę wcisnąć je do serwera:

git add xxx.php
git commit -m "TEST"
git push origin master

Ale błąd, który otrzymuję, to:

error: src refspec master does not match any.  
error: failed to push some refs to 'ssh://xxxxx.com/project.git'
Sinoohe
źródło
26
@Marco To nie jest duplikat. Jest to bardzo specyficzny problem z wypychaniem gałęzi lokalnej do gałęzi zdalnej. Ten dotyczy inicjowania repozytorium i zwiększania go. Powodują ten sam błąd, ale POWODY, które powodują ten błąd, a poprawki są zupełnie inne. Ponadto, sinoohe, powinieneś zaakceptować odpowiedź. Prawdopodobnie pierwszy, ponieważ odpowiada na pytanie i pomógł ponad 350 osobom.
tandrewnichols
Czy skonfigurowałeś komendy git config, aby instalować i konfigurować git globalnie na twoim komputerze?
IgorGanapolsky
1
Mam nadzieję, że ten post byłby użyteczny dla kogoś- samranga.blogspot.com/2015/07/ ... Błąd w pytaniu może zostać wyskakujący, nawet gdy spróbujemy utworzyć repozytorium git BitBucket z już istniejącego projektu
Samitha Chathuranga
Wystąpił ten błąd podczas próby wprowadzenia niewłaściwej nazwy oddziału. Rozwiązano za pomocą, git statusaby uzyskać właściwy.
Tom Howard,
5
Jeszcze jedno proste zadanie utrudnione przez Git. Deweloperzy Git powinni wykorzystywać przepełnienie stosu jako sprzężenie zwrotne w swojej pętli SDLC. Ponad 850 000 osób powinno wskazać, że coś jest nie tak z przepływem pracy Git. Muszą zatrudnić eksperta UX, ponieważ najwyraźniej nie są w stanie zrobić tego dobrze.
jww

Odpowiedzi:

4137

Może po prostu musisz to zrobić. Wpadłem na to, kiedy:

mkdir repo && cd repo
git remote add origin /path/to/origin.git
git add .

Ups! Nigdy nie popełniłem!

git push -u origin master
error: src refspec master does not match any.

Musiałem tylko:

git commit -m "initial commit"
git push origin master

Sukces!

Baisong
źródło
130
Nie śledź tego kroku na ślepo, spójrz na to, o czym wspomniał @Vi, a następnie zmodyfikuj polecenie push, aby poprawić ref.
Kumar
49
Najbardziej prawdopodobną przyczyną tego błędu jest to, że wszystkie pliki nie są śledzone i nie zostały dodane. git add --allw przypadku, gdy chcesz dodać wszystkie pliki Lub możesz selektywnie dodawać pliki. Następnie git commit -m "Initial comment", git push origin master. To na pewno zadziała.
Bhanu Pratap Singh
6
Naprawiono inny problem, który jest miły, ale nie jest odpowiedzią na to aktualne pytanie.
Michael Durrant,
7
git commit -m 'initial commit'powinien być podwójnie cytowany. ” git commit -m "initial commit", przynajmniej w systemie Windows.
dance2die
5
Kolejny możliwy powód: tak naprawdę nie masz oddziału zwanego mistrzem
CarlosAS
842
  1. Spróbuj git show-refzobaczyć, jakie masz referencje. Czy istnieje refs/heads/master?

  2. Możesz wypróbować git push origin HEAD:masterrozwiązanie bardziej niezależne od lokalnych odniesień. Wskazuje to wyraźnie, że chcesz przekazać lokalne odwołanieHEAD do zdalnego odwołaniamaster (zobacz dokumentację git-push refspec ).

Vi.
źródło
6
mój główny oddział nie był na szczycie zobowiązań! więc utworzyłem gałąź, która znajdowała się na końcu wszystkich gałęzi i zepchnąłem je na serwer:
sinoohe,
10
git checkout -b testbranch; git push origin testbranch: master
sinoohe
101
git show-refpokazał moją gałąź; git push origin HEAD:<branch>pracował dla mnie.
Glen Solsberry,
5
Właśnie mnie uratowałeś Vi. Dziękuję git push origin HEAD:master. Ale dlaczego coś takiego git push --force origin masternie działa?
shkschneider,
4
@ gms8994 - masz rację. jeśli ktoś utworzy gałąź jako pierwszą rzecz zamiast wypychania do master, unfriendlypojawia się ten sam błąd. użyj git push origin <branch>zamiast masterw przypadku, gdy spróbujesz wykonać git checkout -b <branch>PIERWSZE naciśnięcie po inicjaługit remote add origin <url>
asyncwait
225

Miałem podobny błąd po usunięciu wszystkich plików na moim komputerze lokalnym i muszę wyczyścić wszystkie pliki w repozytorium.

Mój komunikat o błędzie był mniej więcej taki:

error: src refspec master does not match any.
error: failed to push some refs to 'git@github ... .git'

I został rozwiązany przez wykonanie następujących poleceń:

touch README
git add README

git add (all other files)
git commit -m 'reinitialized files'
git push origin master --force  # <- caution, --force can delete others work.
Aryo
źródło
10
Inne odpowiedzi nie rozwiązały mojego problemu (na przykład już się popełniłem i nadal miałem ten błąd), ale git push origin BRANCH --forcedziałały. Dziękuję Ci!
Lemmings19
Zobacz tę wcześniejszą odpowiedź . Podejrzewam, że musiałeś dodać plik, ponieważ git nie będzie śledził pustych katalogów.
3
push - force może również całkowicie zdmuchnąć ciężką pracę współpracowników. Dodano ostrzeżenie.
Michael Durrant
3
To rozwiązało mój problem. Myślę, że git add to zrobił. Podczas gdy pchanie rzeczy na początku git nie rozpoznaje rzeczy, być może dlatego miałem problem. Polecenie git add rozwiązało mój problem. także później mogłem naciskać bez --force. Dzięki Aryo
Anandaraja_Srinivasan
203
  1. Moje zmiany zostały już zatwierdzone
  2. Siła push nadal dawała mi ten sam błąd.

Więc wypróbowałem rozwiązanie Vi :

git push origin HEAD:<remoteBranch> 

To zadziałało dla mnie.

tldr
źródło
19
W końcu dowiedziałem się, że to dlatego, że źle napisałem nazwę oddziału. Udało mi się zepchnąć gałąź A do początku z gałęzią o nazwie B git push origin HEAD:B, ale wciąż pojawia się ten sam błąd za każdym razem, gdy naciskam git push origingałąź A
Yi H.
1
@ YiHuang, dzięki, sprawdziłem wcześniej nazwę mojego oddziału, a potem sprawdziłem ją ponownie z powodu twojego komentarza - miałem ten sam problem, źle napisałem.
lakesare
1
@ YiH.i byłem pewien, że nazwa mojego oddziału jest poprawna, ale sprawdziłem ją ponownie po przeczytaniu Twojego komentarza i mój zły - ma ten sam problem.
Wskaźnik
125
git push -u origin master
error: src refspec master does not match any.

W tym celu należy wprowadzić komunikat zatwierdzenia w następujący sposób, a następnie wcisnąć kod:

git commit -m "initial commit"

git push origin master

Pomyślnie przekazany do opanowania.

VIKAS KOHLI
źródło
Sprawdziłem, czy działa. Proszę zignorować opcję -u, a następnie spróbować
VIKAS KOHLI,
Sprawa tutaj wydaje się być zupełnie inna niż PO ... ale wydaje się, że wielu, w tym ja, miałem ten problem.
ZX9,
110

Dla mnie musiałem upewnić się, że klucz publiczny jest poprawnie skonfigurowany na serwerze (dołączony w ~ / .ssh / Author_keys ) oraz w GitHub / Bitbucket (dodany do moich kluczy SSH na GitHub lub Bitbucket) - muszą się zgadzać.

Następnie:

git add --all :/

git commit -am 'message'

git push -u origin master

W końcu mi się udało.

Czerwony
źródło
88

Odkryłem, że stało się to w zupełnie nowym repozytorium po tym, jak Git dodałem tylko katalog.

Gdy tylko dodałem plik (np. README), push Git działał świetnie.

Andrew E.
źródło
6
To prawdopodobnie działa, ponieważ git tak naprawdę nie śledzi katalogów, tylko pliki. Więc jeśli katalog jest pusty, git tak naprawdę go nie doda.
1
OP dodał plik (xx.php), więc nie był to problem w tym przypadku, chociaż w innych przypadkach może to stanowić problem i dodanie pliku stanowi rozwiązanie tego problemu.
Michael Durrant,
1
Takie proste rozwiązanie frustrującego problemu. Testowałem tworzenie i klonowanie repozytoriów i stworzyłem puste katalogi, a nie pliki.
James Wierzba
1
8 lat później zaoszczędziło mi to trochę bólu głowy!
rvictordelta
W moim przypadku 1 -> git init 2 ---> git add origin .... itd. 3 ---> git git push -u origin master ===> Potem dostałem powyższy błąd. ===> Następnie wykonałem 2 polecenia, znikają. ---> git add * ---> git commit -m "Some message" ---> git git push -u origin master ===> W moim przypadku działało dobrze.
Rao,
67

Brakuje lub pomija git add .lub git commitmoże powodować ten błąd:

git push -u origin master
Username for 'https://github.com': yourusername
Password for 'https://[email protected]': 
error: src refspec master does not match any.
error: failed to push some refs to 'https://github.com/yourusername/foobar.git'

Aby to naprawić, zainicjuj ponownie i postępuj zgodnie z odpowiednią sekwencją:

git init
git add .
git commit -m 'message'
git *create remote
git push -u origin master
aug2uag
źródło
to prawda, koniec działalności jest bardziej konkretny git remote add __REMOTE_NAME__ __URL_OR_SSH__, a nad zdalną nazwą jest „pochodzenie”
aug2uag
1
Dodali i zaangażowali się w swoje pytanie, więc nie było to problemem, chociaż pomaga to innym ludziom.
Michael Durrant,
Ta odpowiedź zadziałała jednak z powodu -uopcji, która została tutaj użyta.
Michael Durrant,
63

Aby to naprawić, ponownie zainicjuj i postępuj zgodnie z odpowiednią sekwencją kodu:

git init
git add .
git commit -m 'message'
git push -u origin master
pratik kumar
źródło
55

Upewnij się, że dodałeś najpierw, a następnie zatwierdzaj / wypychaj:

Lubić:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master
Saurabh Singh
źródło
43

Dzieje się tak również wtedy, gdy jesteś w określonej gałęzi i próbujesz wypchnąć inną gałąź, która jeszcze nie istnieje, na przykład:

$ git branch
* version-x  # you are in this branch
  version-y

$ git push -u origin master
error: src refspec master does not match any.
error: failed to push some refs to 'origin_address'
wilsonfoz
źródło
3
LOL. Próbowałem naciskać na master, ale ta gałąź nie istniała. Nazywano go stabilnym źródłem.
penner
1
-uMoże pomogły tutaj.
Michael Durrant,
1
W powyższym przypadku problemem jest oczywiście to, że nie ma lokalnego oddziału master, więc nie można go przesuwać. Albo chcesz przepchnąć istniejącą gałąź - albo utworzyć gałąź główną, a następnie pchnąć ją w następujący sposób:git checkout -b master; git push -u origin master;
tanius
4
Właśnie to dostałem, kiedy źle napisałem nazwę oddziału.
Sebastian Ęrleryd
2
Mój lokalny oddział został napisany „ h eduler” i robiłem git push origin scheduler. HA! Jedna litera zabije cię w programowaniu. lol
protoEvangelion 17.07.17
43

Napotkałem ten sam problem i użyłem --allow-empty:

$ git commit -m "initial commit" --allow-empty
...
$ git push
...

Suplement

Jednym z głównych powodów tego problemu jest to, że niektóre serwery Git, takie jak BitBucket, nie mają masterinicjalizacji swojego oddziału po sklonowaniu nowego repozytorium.

Jin Kwon
źródło
35

Dla mnie następujące prace polegały na przenoszeniu nieśledzonych plików:

git add --all

Następnie wykonałem podobne kroki

 git commit -m "First commit"

Następnie,

git remote add origin git@github.....

Ostatni, ale nie mniej ważny:

git push -u origin master

Gdy to zrobisz, pojawią się zabezpieczenia systemu Windows z prośbą o podanie nazwy użytkownika i hasła.

Areeha
źródło
1
miałeś na myśli `git add --all` z dwoma myślnikami
Abdallah Abdillah
29

W moim przypadku zapomniałem dołączyć .gitignoreplik. Oto wszystkie wymagane kroki:

  1. Utwórz puste repozytorium Git na pilocie,
  2. Na komputerze lokalnym utwórz plik .gitignore dla swojego projektu. GitHub podaje tutaj listę przykładów
  3. Uruchom terminal, aw swoim projekcie wykonaj następujące polecenia:

    git remote add origin YOUR/ORIGIN.git
    
    git add .
    
    git commit -m "initial commit or whatever message for first commit"
    
    git push -u origin master
    
Ismail H.
źródło
W jaki sposób omawiany błąd związany jest z .gitignore ?! Jeśli jest to powiązane (w co bardzo wątpię), powinieneś to wyjaśnić w swojej odpowiedzi. Dzięki
pedram bashiri
26

Po prostu dodaj wstępne zatwierdzenie. Wykonaj następujące kroki:

  • git add .

  • git commit -m "initial commit"

  • git push origin master

To zadziałało dla mnie.

NeeruKSingh
źródło
24

Mój problem polegał na tym, że gałąź „master” nie została jeszcze utworzona lokalnie.

Szybki

git checkout -b "master"

utworzył gałąź główną, w którym to momencie szybko

git push -u origin master

przekazał pracę do repozytorium Git.

Anthony
źródło
22

Prawdopodobnie zapomniałeś polecenia „git add”. po komendzie „git init”.

Sumer
źródło
Plus git commitoczywiście ...
Bill
19

Oznacza to po prostu, że zapomniałeś wykonać wstępne zatwierdzenie, spróbuj

git add .
git commit -m 'initial commit'
git push origin master
Xuri
źródło
proszę napisać git commit -m „initial commit”
Yash Agrawal
19
  1. Pierwszy, git add .
  2. Druga, git commit -m "message"
  3. Trzeci, git push origin branch

Sprawdź błędy ortograficzne, ponieważ może to również dać ten błąd.

Alwan Mortada
źródło
19

Postępowałem również zgodnie ze wskazówkami GitHub w następujący sposób, ale nadal napotykałem ten sam błąd, o którym wspomniał PO:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master

Dla mnie i mam nadzieję, że to pomaga niektórym, pchałem duży plik (1.58 GB on disk)na moim MacOS. Podczas kopiowania wklejania sugerowanego wiersza kodów powyżej nie czekałem, aż mój procesor faktycznie zakończy add .proces. Więc kiedy wpisałem git commit -m "message", w zasadzie nie odwoływałem się do żadnych plików i nie ukończyłem wszystkiego, co trzeba zrobić, aby pomyślnie zatwierdzić mój kod w GitHub.

Dowodem na to jest to, że podczas pisania git statuszwykle dostaję zielone czcionki dla dodawanych plików. Ale wszystko było czerwone. Jakby wcale nie został dodany.

Więc przerobiłem kroki. Wpisałem git add .i czekałem na zakończenie dodawania plików. Następnie wykonałem kolejne kroki.

Żel
źródło
18

Miałem ten sam problem, gdy nie mogłem uruchomić:

git add .

(Musisz mieć co najmniej jeden plik, inaczej błąd pojawi się ponownie).

neoDev
źródło
18

Dzieje się tak, jeśli zapomnisz zatwierdzić przed pchnięciem po raz pierwszy. Po prostu biegnij:

git commit -m "first commit"
Badr Bellaj
źródło
17

Aby sprawdzić bieżący stan, git status .

I wykonaj również następujące kroki:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master
Dinith
źródło
16

Dzieje się tak po dodaniu pliku, zapomnieniu o zatwierdzeniu i wypchnięciu. Zatwierdź pliki, a następnie wypchnij.

użytkownik993563
źródło
14

Miałem ten sam problem. Zrobiłem to, wykonując następujące kroki:

1. git commit -m 'message'
2. git config --global user.email "your mail"
3. git config --global user.name "name"
4. git commit -m 'message'
5. git push -u origin master
użytkownik3051460
źródło
14

Jeśli pojawi się ten błąd podczas pracy w odłączonym trybie HEAD, możesz to zrobić:

git push origin HEAD:remote-branch-name

Zobacz także: Nakłanianie Gita do popychania z odłączonej głowy

Jeśli jesteś w innym oddziale lokalnym niż w oddziale zdalnym, możesz to zrobić:

git push origin local-branch-name:remote-branch-name
kłapnięcie
źródło
13

W scenariuszu, w którym pobierasz kod z zewnętrznego repozytorium (GitHub) i chcesz go zaimportować do systemu osobistego / wewnętrznego, to polecenie naprawdę świeci:

git push --all origin

To wypycha wszystkie lokalne oddziały do ​​pilota, bez sprawdzania referencji i bez nalegania na zatwierdzenia.

d.raev
źródło
12

Stanie się tak również, jeśli masz literówkę w nazwie oddziału, którą próbujesz wypchnąć.

Gavin
źródło
2
Podejrzewam, że wielu z nas, którzy przybyli tutaj przez wyszukiwarkę internetową, źle wpisało nazwę!
mędrzec
12
git add .

to wszystko czego potrzebujesz. Ten kod śledzi wszystkie nieśledzone pliki w twoim katalogu.

Myśliwy
źródło
10

W przypadku, gdy napotykasz ten problem, nawet po wykonaniu git initi pchnięciu początkowego zatwierdzenia. Następnie możesz wypróbować następujące

git checkout -b "new branch name"
git push origin "new branch name"

Twój kod zostanie przekazany jako nowy oddział.

Govind
źródło