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'

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!


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 ).


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.

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.


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.


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.


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.


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://yourusername@github.com': 
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

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

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

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'

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.


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.


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
    

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.


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.


22

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


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

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.


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.


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).


18

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

git commit -m "first commit"

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

16

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


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


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.


12

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


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.


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ł.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.