Co to jest Head in Git?

Czasami widzisz dokumentację Gita odnoszącą się do czegoś zwanego HEAD. Na przykład gałąź powinna być całkowicie zintegrowana z HEAD. Ale czym właściwie jest Git HEAD?

W tym artykule dowiemy się więcej o Git HEAD, ale wcześniej podsumujemy, czym jest Git i do czego służy. Git to narzędzie do kontroli rozproszonej, wykorzystywane nie tylko przez menedżerów produktu i programistów, ale także naukowców zajmujących się danymi do zarządzania rozwojem kodu źródłowego programu i jego historii.

Wskaźnik HEAD w Git

Git utrzymuje zmienną do odwoływania się, nazwaną HEAD do najnowszego zatwierdzenia w gałęzi ostatniego pobrania. Możesz sobie wyobrazić HEAD jako „aktualnie zaangażowaną gałąź”. I możemy myśleć o tym jako o wskaźniku, ponieważ celem tej zmiennej jest wskazywanie lub działanie jako odniesienie do konkretnego zatwierdzenia w repozytorium. Powiedzmy, że dokonujemy nowego zatwierdzenia w repozytorium, a następnie wskaźnik lub HEAD przesunie się lub zmieni swoją pozycję, aby wskazać nowy zatwierdzenie.

HEAD przez cały czas wskazuje punkt początkowy obecnej gałęzi w repozytorium. Można go traktować jako ostatni stan lub ostatni wypisany punkt w repozytorium. Innymi słowy, HEAD jest wskaźnikiem do rodzica następnego zatwierdzenia lub miejsca, w którym nastąpi następne zatwierdzenie, ponieważ tam przerwano repo.

Dobrą analogią byłby odtwarzacz i klawisze odtwarzania i nagrywania jako HEAD. Gdy dźwięk zaczyna się nagrywać, taśma przesuwa się do przodu, przechodząc obok głowy, nagrywając na nią. Przycisk Stop zatrzymuje nagrywanie, wciąż wskazując na punkt, który ostatnio nagrał, a punkt, w którym zatrzymała się głowica, to miejsce, w którym będzie kontynuował nagrywanie po ponownym naciśnięciu przycisku Nagrywaj. Jeśli się poruszamy, wskaźnik głowy przesunie się w różne miejsca, jednak po ponownym naciśnięciu przycisku Record rozpocznie się nagrywanie od punktu, w którym wskazywała głowa, gdy naciśnięto przycisk Record.

W Git możesz użyć poniższego polecenia, aby zobaczyć, co wskazuje wskaźnik HEAD.

cat .git / HEAD:

  • Pokazuje zawartość .git / HEAD jak pokazano poniżej
  • ref: refs / heads / master
  • Jest to w zasadzie symboliczne odniesienie do najnowszej zatwierdzonej gałęzi, którą sprawdziłeś i skutecznie wskazuje zatwierdzenie na początku bieżącej gałęzi.

Za każdym razem, gdy dokonujemy nowego zatwierdzenia, jak pokazano poniżej, jest on dodawany przed bieżącym HEAD, co powoduje, że Git automatycznie wskazuje HEAD na nowe zatwierdzenie.

git diff HEAD..HEAD ~ 3: Mówiąc dokładniej, HEAD to ruchomy wskaźnik, który może odnosić się do bieżącej gałęzi lub nie może, ale zawsze odnosi się do „bieżącego zatwierdzenia”. To (bieżące zatwierdzenie) to zatwierdzenie „git commit” jest zbudowane na nim i często jest porównywane z „git diff –cached” i „git status”.

git log @: Wpisywanie „HEAD” zajmuje dużo czasu, zwłaszcza gdy jest skrót „@”. Wybrano symbol „@”, ponieważ naturalnie jest zgodny ze składnią (np. (u)), ale poza tym nie ma odniesienia ani operacji, a gdy nie ma żadnej z nich, „HEAD można założyć zamiast @.

1. Odłączona GŁOWA

HEAD może wskazać konkretną zmianę, która nie została jeszcze powiązana z nazwą oddziału. Jest to sytuacja nazywana odłączonym HEAD i dzieje się tak, gdy ktoś sprawdza coś innego niż gałąź (lokalna), powiedzmy konkretny zatwierdzenie, gałąź zdalną lub tag. Odłączony HEAD może być zatem użyty do pobrania zatwierdzenia, które nie wskazuje punktu początkowego żadnej istniejącej gałęzi, lub do stworzenia zupełnie nowego zatwierdzenia, do którego nie musi odwoływać się znany oddział.

Weźmy przykład, w którym kasujemy zatwierdzenie b w taki lub inny sposób

  • git checkout master ^#lub
  • git checkout v3.1

Zauważ, że bez względu na to, które polecenie polecenia zostanie użyte, HEAD będzie teraz odnosił się do zatwierdzenia b. Ten stan b jest nazywany stanem odłączonej HEAD.

Spójrzmy na poniższe przykłady, aby zobaczyć, co się dzieje, gdy tworzone jest zatwierdzenie:

git checkout -b foo: Najpierw tworzona jest nowa gałąź o nazwie foo, która jest nazywana zatwierdzeniem f, co z kolei aktualizuje HEAD, aby wskazywał na gałąź foo. Oznacza to, że nie będzie już w stanie odłączonym HEAD.

git branch foo: Tworzy nową gałąź o nazwie foo, która jest określana jako zatwierdzenie f, ale HEAD pozostaje odłączony.

git tag foo: To także tworzy nowy tag o nazwie foo, który jest nazywany zatwierdzeniem f, ale HEAD pozostaje odłączony.

Załóżmy, że zmieniłeś pozycję na inną niż zatwierdzenie f, następnie najpierw musisz odzyskać nazwę obiektu (zwykle odbywa się to za pomocą polecenia git reflog), a następnie tworzona jest do niej referencja.

Aby dowiedzieć się o dwóch ostatnich zatwierdzonych poleceniach HEAD, użyj jednego z poniższych poleceń:

  • git log -g -2 HEAD #or
  • git reflog -2 HEAD

2. ORIG_HEAD

Jest jeszcze jeden rodzaj HEAD, o którym musisz wiedzieć. Polecenia „scal” lub „wyciągnij” zawsze pozostawiały oryginalną końcówkę bieżącej gałęzi w nazwie ORIG_HEAD. Można go użyć za pomocą następujących poleceń.

git reset –hard ORIG_HEAD: Używając tego, reset hard przywraca plik indeksu wraz z drzewem roboczym z powrotem do pierwotnego stanu, jednocześnie resetując końcówkę gałęzi do tego zatwierdzenia, ale odrzuca lokalne zmiany.

git reset –merge ORIG_HEAD: Ale co jeśli chcesz zachować lokalne zmiany, możesz użyć powyższej komendy, aby zachować lokalne zmiany. ponadto, scalanie zawsze ustawia „.git / ORIG_HEAD” na pierwotny stan HEAD, więc problematyczne scalanie można usunąć, używając polecenia „git reset ORIG_HEAD”. Oprócz tego scalanie ustawia przez cały czas „.git / ORIG_HEAD” na pierwotny stan HEAD, aby usunąć problematyczne scalanie za pomocą „git reset ORIG_HEAD”.

Jeśli napotkasz problem z wieloma zatwierdzeniami, ORIG_HEAD jest ustawiany na punkt początkowy bieżącej gałęzi przed zastosowaniem jakichkolwiek łat, ponieważ błąd w zatwierdzeniach można łatwiej naprawić w ten sposób.

Zalety Git HEAD

  • Służy do wskazywania ostatnio zatwierdzonego oddziału.
  • Można go użyć do wprowadzenia zmian od ostatnio odwiedzonego punktu.
  • Można go również użyć do przejścia do różnych punktów historii i stamtąd.
  • Utrzymuje repozytorium i proces w czystości i czytelności.

Wniosek

Git ma wiele zastosowań i jest szeroko stosowany przez programistów, menedżerów produktu i naukowców zajmujących się danymi. Jego polecenia są bardzo skuteczne i mogą być bardzo przydatne. HEAD jest odniesieniem do ostatniego zatwierdzenia w aktualnie wyewidencjonowanym oddziale.

Polecane artykuły

To jest przewodnik po What is Head in Git ?. Tutaj omawiamy wskaźnik HEAD w Git, który obejmuje Detached HEAD i ORIG_HEAD wraz z zaletami Git HEAD. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej -

  1. Co to jest Git Fetch?
  2. Git Fetch vs Git Pull
  3. Co to jest Git Branch?
  4. Terminologia Git
  5. System kontroli wersji GIT
  6. Git Push
  7. Trzy etapy cyklu życia Git z przepływem pracy
  8. Jak korzystać z GIT Cherry-pick z Przykładem?

Kategoria: