Dlaczego moja „gałąź git” nie ma mastera?


96

Jestem początkującym gitem i ciągle czytam o gałęzi „mistrzowskiej”. Czy „mistrz” to tylko konwencjonalne imię, którego używali ludzie, czy też ma specjalne znaczenie HEAD?

Kiedy robię git branchna klonie, który mam, widzę tylko jedną pojedynczą gałąź - tę, na której jestem. W ogóle nie ma „pana”. Jeśli piszę git checkout master(jak widzę w wielu tutorialach lub przewodnikach), otrzymuję

error: pathspec 'master' did not match any file(s) known to git.

Jestem po prostu zdezorientowany, dlaczego mój klon nie ma masterznaku, że wszyscy wydają się sugerować, że zawsze istnieje.

Odpowiedzi:


76

Większość repozytoriów Git używa masterjako głównej (i domyślnej) gałęzi - jeśli zainicjujesz nowe repozytorium Git za pośrednictwem git init, zostanie ono masterdomyślnie wyewidencjonowane.

Jeśli jednak sklonujesz repozytorium, domyślną gałęzią, którą masz, jest to, na co HEADwskazuje pilot (w HEADrzeczywistości jest to symboliczny odnośnik, który wskazuje na nazwę gałęzi). Więc jeśli sklonowane repozytorium HEADwskazywało, powiedzmy foo, to twój klon będzie miał tylko foogałąź.

Pilot, z którego sklonowałeś, może nadal mieć mastergałąź (możesz to sprawdzić git ls-remote origin master), ale domyślnie nie utworzyłbyś lokalnej wersji tej gałęzi, ponieważ git clonesprawdza tylko wersję pilota HEAD.


6
A potem jak wykupić master od początku, jeśli istnieje?
Bunyk

jak ustawić HEAD na mastera
Matt Smith

32
Utworzyłem repozytorium za pomocą git init, a gałąź główna nie została utworzona. W Github gałąź jest tworzona automatycznie, ale nie za pomocą Bitbucket. W Mising kroki były: git add ., git commit -m "Test", a następnie git push -u origin master.
Shailen

12
@Amber Otrzymuję ten błąd „fatal: master: not a valid SHA1”
KK_07k11A0585

1
@Amber git ls-remote origin masternic nie pokazuje.
Parisa Khateri

86

Aby pobrać gałąź, która nie istnieje lokalnie, ale znajduje się w zdalnym repozytorium, możesz użyć tego polecenia:

git checkout -t -b master origin/master

Dziękuję za próbę pomocy, mimo że to pytanie jest dość stare. Ale twoja odpowiedź nie była tym, o co prosiłem.
aberrant 80

fatal: Cannot update paths and switch to branch 'master' at the same time.
Raphael Onofre


Naprawiono na github tworzenie gałęzi głównej i ustawienie jako domyślne
Raphael Onofre

45

master to tylko nazwa gałęzi, nie ma w tym nic magicznego poza tym, że jest tworzona domyślnie, gdy tworzone jest nowe repozytorium.

Możesz dodać go z powrotem za pomocą git checkout -b master.


git checkout -b masterpo prostu dodaje dla mnie nową gałąź z bieżącej.
nnyby

1
@nnyby git checkout -b masterutworzy mastergałąź z tego, co HEADjest - więc jeśli jesteś w innej gałęzi, utworzy mastergałąź z tego. Z wyjątkiem sytuacji, gdy masz już mastergałąź (którą będziesz mieć, chyba że np. Ją usunąłeś lub nigdy jej nie zatwierdziłeś). Jeśli masz już mastergałąź, to polecenie spowoduje po prostu błąd.
Matt Curtis,

2
Moje pytanie brzmi: jak przypadkowo usunąłem wzorzec?
Eric Walker

@EricWalker masterto tylko gałąź, którą można usunąć za pomocą git branch -d master. Chociaż git ochroni cię przed usunięciem gałęzi, w której się znajdujesz, nie ma nic specjalnego chroniącego mastergałąź. Mówiąc dokładniej, trudno powiedzieć, jak to zrobiłeś. Może używasz polecenia swojej powłoki, historyaby rzucić okiem?
Matt Curtis,

1
Cześć @MattCurtis, Twoja odpowiedź jest obecnie myląca. git checkout -b masterbędzie działać tylko wtedy, gdy HEAD jest ustawiony na origin / master. W każdym innym przypadku (np. Jesteś na „develop”), git checkout -b masterutworzy gałąź o nazwie „master”, która jest oparta na aktualnej pozycji HEAD (np. Z „develop”). Musisz również określić, która gałąź będzie łykiem dla nowego. @Bunyk ma poprawną odpowiedź w tym wątku: stackoverflow.com/a/21330943/287109
AVIDeveloper

24

Właściwie miałem ten sam problem z zupełnie nowym repozytorium. Próbowałem nawet utworzyć go z git checkout -b master, ale to nie stworzyło gałęzi. Wtedy zdałem sobie sprawę, że jeśli wprowadziłem jakieś zmiany i zatwierdziłem je, git stworzył moją gałąź master.


1
Mylące jest to, że ludzie mówią, że mam wzorca, ale cokolwiek próbowałem zrobić, otrzymywałem komunikaty o błędach mówiące, że nie mam wzorca. (Próbowałem stworzyć gałąź deweloperską, gdy moje repozytorium było jeszcze puste.) Przekazując coś (dowolny plik), teraz powstał master i mogłem zająć się innymi rzeczami. Próbowałem rzeczy w innych odpowiedziach, ale nic nie pomogło. Ta jedna odpowiedź może dotyczyć wielu ludzi. (Dużo czytałem o haszowaniu w Git. Myślę, że jeśli nie ma nic na początku, nie ma nic do haszowania.)
Fai Ng

16

W moim przypadku nie było rozwinąć gałąź, ale nie główny oddział. Dlatego sklonowałem repozytorium, wskazując nowo utworzone HEAD na istniejącą gałąź. Następnie utworzyłem brakującą gałąź główną i zaktualizowałem HEAD, aby wskazywał na nową gałąź główną.

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master

Ach, idziemy… Nie miałem mistrza ani nic. Najpierw dodałem nowy plik i wstępne zatwierdzenie - potem to zrobiłem. Działał jak urok
Dustin Silk

12

jeśli jest to nowe sklonowane repozytorium, może nadal być puste, w takim przypadku:

git push -u origin master

prawdopodobnie powinien to rozwiązać.

(zrobił w moim przypadku. nie jestem pewien, czy to ten sam problem, pomyślałem, że powinienem opublikować to na wszelki wypadek. może pomóc innym.)


8

Natknąłem się na ten sam problem i odkryłem problem. Kiedy inicjalizujesz repozytorium, w rzeczywistości nie ma żadnych gałęzi. Po uruchomieniu projektu uruchom, git add .a następnie git commitzostanie utworzona gałąź główna.

Bez sprawdzania czegokolwiek nie masz gałęzi głównej. W takim przypadku musisz wykonać kroki sugerowane przez inne osoby.


2
prawdziwe. wykonaj „git init”, a następnie „git checkout -b nazwa oddziału” i nie będziesz mieć żadnej gałęzi głównej
koem

To również może nie wystarczyć, jeśli folder jest pusty. Aby to działało, powinieneś dodać kilka plików. Ta kolejna niezręczność jest właściwie rozczarowująca.
alehro

0

Wygląda na to, że musi istnieć co najmniej jedno lokalne zatwierdzenie w gałęzi master do wykonania:

git push -u origin master

Więc jeśli tak, git init .a potem git remote add origin ...nadal musisz:

git add ...
git commit -m "..."

0

Jeśli utworzysz nowe repozytorium z interfejsu GUI sieci Github, czasami otrzymujesz nazwę „main” zamiast „master”. Używając polecenia git statusz terminala, zobaczysz, w której lokalizacji jesteś. W niektórych przypadkach zobaczysz origin/main.

Jeśli próbujesz przekazać swoją aplikację do usługi w chmurze za pośrednictwem interfejsu wiersza polecenia, użyj opcji „main”, a nie „master”.

przykład: git push heroku main

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.