Mylący komunikat o błędzie z git

95

Otrzymałem wiadomość od Gita:

Poprosiłeś o ściągnięcie ze zdalnego „źródła”, ale nie określiłeś gałęzi. Ponieważ nie jest to domyślna konfiguracja zdalna dla bieżącej gałęzi, należy określić gałąź w wierszu poleceń.

Czy ktoś może to wyjaśnić? i co ważniejsze, jak to naprawić?

cinek
źródło

Odpowiedzi:

95

Musisz powiedzieć gitowi, którą gałąź chcesz pobrać ze zdalnych repozytoriów „pochodzenia”.

Myślę, że chcesz mieć domyślną gałąź (master), więc git pull origin masterpowinieneś rozwiązać problem.

Zobaczyć git help branch, git help pulla git help fetch więcej informacji.

p4bl0
źródło
2
aby to działało musiałem wyewidencjonować gałąź "master" (nie wybrano żadnej gałęzi) i wyciągnąć, co rozwiązało problem.
cinek
@cinek: Tak, git pullściąga i łączy się z bieżącą gałęzią, więc jej zachowanie całkowicie zależy od tego, która gałąź jest wyewidencjonowana, a przy odłączonej gałęzi HEAD (brak wyewidencjonowanej gałęzi) nie ma możliwości, aby wiedzieć, którą gałąź wyciągnąć.
Cascabel
@cinek: Przypuszczam, że jesteś nowy na gicie, więc przyznaję, że byłeś w całkowicie standardowym stanie na gałęzi master, mój zły :-).
p4bl0
87

Aby to naprawić, zakładając, że jesteś w mastergałęzi i chcesz pobrać mastergałąź ze originzdalnego, w wystarczająco nowych wersjach Git (1.8 lub nowszych):

git branch -u origin/master master

(Analogicznie dla innych oddziałów i / lub pilotów.)

Jeśli możesz to połączyć z pchnięciem, jest jeszcze krócej:

git push -u origin master

Następnie zwykły git pull/ git pushzrobi to, czego oczekujesz.


Podczas serii Git 1.7 git branchnie miał -uprzełącznika (tylko git pushmiał), a zamiast tego trzeba było używać znacznie dłużej --set-upstream:

git branch --set-upstream master origin/master

Zwróć uwagę na odwrócenie argumentów w porównaniu z -u. Nieraz grzebałem w tym zamówieniu.


Nawiasem mówiąc, wszystko to jest skrótem do wykonywania następujących czynności, które nadal możesz zrobić jawnie:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

Przed 1.7 trzeba było to robić w ten sposób.

Arystoteles Pagaltzis
źródło
Myślę, że polecenie na górze (przynajmniej w mojej wersji Gita) ustawia górną część gałęzi o nazwie „origin” na „origin / master”. Jeśli twój oddział lokalnie nazywa się „master”, myślę, że chciałbyś:git branch --set-upstream master origin/master
Evan Donovan
Co ciekawe, -uopcja ta nie jest udokumentowana git branchw mojej wersji 1.8.5.3, co sprawia, że ​​wasza dokumentacja jest tutaj jeszcze ważniejsza. Jak zauważyłeś, opcja była niedostępna w wersji 1.7. *. Ponieważ -ujest skrótem od --set-upstream, czy kolejność jego argumentów nie powinna być odwrócona, tak jak to zrobiłeś z --set-upstreampowodu komentarza @ EvanDonovan?
płyty kuchenne
Jednak gdy używam polecenia, które pokazujesz ( git branch -u origin/master master), działa ono zgodnie z oczekiwaniami / przeznaczeniem dla mnie: „Branch master skonfigurowany do śledzenia zdalnego branch mastera z początku”.
płyty kuchenne
1
@hobs: to właściwie przewrotność Gita. -uPrzełącznik jest faktycznie nie krótka forma --set-upstream. Jego kolejność argumentów jest skutecznie odwrócona od kolejności dla --set-upstream. Myślę, że dopiero później --set-upstream-to(zwróć uwagę na „-to”) zostało wprowadzone, co -ujest teraz właściwie krótką formą.
Arystoteles Pagaltzis
Łał! Naprawdę mylące. Dzięki za rozwikłanie tego dla mnie.
płyty grzewcze
3

Wiadomość mówi dokładnie o czym jest. Twoja obecna gałąź nie jest powiązana z żadnym oddziałem pochodzenia (nie śledzi) . Więc git nie wie, co ciągnąć.

Co robić? To zależy...

W większości sytuacji pracujesz z lokalną gałęzią xyz, która rozgałęzia się od mastera sklonowanego z mastera pochodzenia . Zwykłym sposobem rozwiązania tego problemu jest przełączenie się na master i pociągnięcie, aby zsynchronizować go z początkiem, a następnie powrót do xyz i rebase master.

Ale w swojej sytuacji możesz chcieć zrobić coś innego. Nie możemy tego wiedzieć, nie znając szczegółów twoich oddziałów i pilotów oraz tego, jak zamierzasz z nich korzystać.

Tomek Szpakowicz
źródło