Jakie są pojęcia git HEAD, master, origin?

196

Gdy uczę się o git, wciąż spotykam się z terminami HEAD, master, origin i nie jestem pewien, jakie są różnice. Jeśli dobrze rozumiem, HEAD jest zawsze równy najnowszej wersji? A jeśli tak, to czy jest to najnowsza wersja całego repozytorium lub określonej gałęzi lub tagu? To takie mylące. Przeczytałem tak wiele samouczków na ten temat i takich rzeczy, jak rozgałęzianie / scalanie, ale nadal nie mogę się tym zająć.

użytkownik779159
źródło

Odpowiedzi:

231

Bardzo polecam książkę „Pro Git” Scotta Chakona . Poświęć trochę czasu i przeczytaj to, odkrywając rzeczywiste repozytorium git.

HEAD : bieżące zatwierdzenie repo. Większość czasu HEADwskazuje na ostatnie zatwierdzenie w bieżącym oddziale, ale nie musi tak być. HEADnaprawdę oznacza po prostu „na co obecnie wskazuje moje repo”.

Jeśli HEADodniesienie, do którego odnosi się zatwierdzenie, nie jest wierzchołkiem żadnej gałęzi, jest to nazywane „odłączoną głową”.

master : nazwa domyślnej gałęzi, którą git tworzy dla ciebie przy pierwszym tworzeniu repo. W większości przypadków „master” oznacza „główny oddział”. W większości sklepów wszyscy starają się opanować, a master jest uważany za ostateczny pogląd na repo. Ale często zdarza się, że gałęzie wydania są nadrzędne w celu wydania. Twoje lokalne repozytorium ma własną gałąź master, która prawie zawsze podąża za masterem zdalnego repo.

origin : domyślna nazwa, którą git nadaje twojemu głównemu zdalnemu repozytorium. Twoje pudełko ma własne repozytorium i najprawdopodobniej wypychasz się na jakieś repozytorium, na które ty i wszyscy twoi współpracownicy. To zdalne repo prawie zawsze nazywa się origin, ale nie musi tak być.

HEADjest oficjalnym pojęciem w git. HEADzawsze ma dobrze zdefiniowane znaczenie. masteri originsą popularnymi nazwami zwykle używanymi w git, ale nie muszą.

Matt Greer
źródło
Co rozumiesz przez „HEAD” oznacza po prostu „na co obecnie wskazuje moje repozytorium”. Jeśli w repozytorium znajduje się wiele oddziałów, który według Ciebie jest HEAD? jeśli istnieją 3 gałęzie (wraz z master) i w gałęzi A dokonano potrzeby zatwierdzenia, HEAD może nadal być w zatwierdzeniu „master”. Która to wersja, na którą wskazuje obecnie repo?
OK999,
2
niejasne, co rozumiesz przez repo (lokalny lub zdalny). Zasadniczo twoja odpowiedź używa wyrażeń, bez wcześniejszego ich wyjaśniania.
Właśnie zrobiłem klon w równoległym katalogu, aby porównać mój katalog roboczy z końcówką zdalnego repo. Tak dobre są wszystkie odpowiedzi git.
@JingHe Czytasz całą książkę? Czy to naprawdę jest tego warte? Mam na myśli, że mówimy o cholernie ponad 500 przeczytanych stronach, co wydaje mi się trochę za dużo ...
Max
1
Aby sprawdzić, czy rozumiem logikę, mogę wywołać gałąź zdalnie jako featureA, a kiedy pcham do tej gałęzi, wpisuję „git push origin featureA”. Mogę również pobrać to samo z pilota, mówiąc „git pull origin originA”, wprowadź zmiany. A głowa odnosi się tylko do lokalnej kopii. @ OK999 Wydaje mi się, że HEAD wskazuje na gałąź, w której jesteś aktualnie wypisany. Jeśli zatwierdzenia dokonano w gałęzi A, ale aktualnie znajdujesz się w gałęzi B, HEAD wskazuje na gałąź B. Musisz przesunąć HEAD do gałęzi A z powrotem przed wykonaniem określonego zatwierdzenia.
TLee,
43

HEADto nie najnowsza wersja, to bieżąca wersja. Zwykle jest to najnowsza wersja bieżącego oddziału, ale nie musi tak być.

master jest nazwą powszechnie nadawaną głównej gałęzi, ale można ją nazwać dowolną inną (lub może nie być głównej gałęzi).

originto nazwa powszechnie nadawana głównemu pilotowi. Remote to kolejne repozytorium, z którego można pobierać i wypychać. Zwykle jest na jakimś serwerze, takim jak github.

svick
źródło
1
Czy możesz podać przykład, kiedy HEAD jest aktualny, ale nie najnowszy? Nigdy wcześniej tego nie widziałem. A może masz na myśli, że nie jest to najnowsza wersja, ponieważ Twoja gałąź znajduje się za gałęzią zdalną, którą śledzi?
Matt Greer,
12
@MattGreer: Jeśli sprawdzisz coś starszego (na przykład znacznik podobny git checkout v1.1), HEAD zmieni się na zatwierdzenie tego znacznika. To może nie być najnowsze zatwierdzenie.
Greg Hewgill
8

Chociaż to nie odpowiada bezpośrednio na pytanie, istnieje świetna książka dostępna za darmo, która pomoże Ci nauczyć się podstaw o nazwie ProGit . Jeśli wolisz wersję z martwego drewna od kolekcji bitów, możesz ją kupić w Amazon .

Piotr Perak
źródło
9
Pytanie nie wymagało książki! Nadal nie jest dla mnie jasne, dlaczego potrzebuję książki dla gita, skoro nie potrzebuję jej dla C ++.
13
Myślisz tylko, że nie potrzebujesz książki dla C ++;)
Piotr Perak