Čo je to Head in Git?

Niekedy uvidíte dokumentáciu Git, ktorá odkazuje na niečo, čo sa volá HEAD. Napríklad vetva by mala byť úplne integrovaná do HEAD. Ale čo presne je Git HEAD?

V tomto článku sa dozvieme viac o Git HEAD, ale skôr si zhrneme, čo je Git a na čo sa používa. Git je nástroj na distribuované riadenie, ktorý používajú nielen produktoví manažéri a vývojári, ale aj vedci údajov na riadenie vývoja zdrojového kódu programu a jeho histórie.

Ukazovateľ HEAD v Gite

Git udržiava premennú na odkazovanie, ktorá sa nazýva HEAD k najnovšiemu potvrdeniu v poslednej vetve pokladnice. Dokážete si predstaviť HEAD ako „aktuálnu angažovanú vetvu“. A môžeme uvažovať ako o ukazovateli, pretože cieľom tejto premennej je poukázať na konkrétny záväzok v úložisku alebo pôsobiť ako odkaz na konkrétny záväzok. Povedzme, že urobíme nové potvrdenie v repo, potom sa ukazovateľ alebo HEAD presunie alebo zmení svoju pozíciu tak, aby ukazovala na nové potvrdenie.

HEAD vždy odkazuje na počiatočný bod súčasnej vetvy v úložisku. Môže sa to považovať za posledný stav alebo posledný rezervovaný bod v úložisku. Inými slovami, HEAD je ukazovateľom na rodiča nasledujúceho odovzdania alebo tam, kde sa uskutoční ďalšie odovzdanie, ako je to v prípade, keď repo skončilo.

Dobrou analógiou by bol prehrávač záznamov a tlačidlá prehrávania a záznamu na ňom ako HEAD. Keď sa zvuk začne nahrávať, páska sa na ňu nahrá dopredu a pohybuje sa okolo hlavy. Tlačidlo Stop zastaví nahrávanie, zatiaľ čo stále ukazuje na miesto, kde bolo naposledy nahraté, a na miesto, kde sa zastavila nahrávacia hlava, je to, kde bude pokračovať v nahrávaní znova, keď sa znova stlačí Nahrávanie. Ak sa pohneme, ukazovateľ hlavy sa presunie na rôzne miesta, avšak po opätovnom stlačení záznamu sa začne nahrávanie od bodu, na ktorý ukazovala hlava pri stlačení záznamu.

V Gite môžete pomocou príkazu nižšie zistiť, čo ukazuje ukazovateľ HEAD.

cat .git / HEAD:

  • Zobrazuje obsah .git / HEAD, ako je to znázornené nižšie
  • ref: refs / heads / master
  • Ide v podstate o symbolický odkaz na poslednú pobočku, ktorú ste sa zaviazali, ktorú ste si rezervovali, a efektívne poukazuje na odovzdanie na začiatku aktuálnej pobočky.

Kedykoľvek urobíme nový commit, ako je to zobrazené nižšie, pridá sa pred aktuálny HEAD, vďaka ktorému Git automaticky nasmeruje HEAD na nový commit.

git diff HEAD..HEAD ~ 3: Presnejšie povedané, HEAD je pohyblivý ukazovateľ, ktorý by mohol odkazovať na aktuálnu vetvu, alebo nemohol, ale vždy sa týka „aktuálneho potvrdenia“. Je to (súčasný commit), pretože „git commit“ je založený na vrchole a často sa porovnáva s „git diff –cached“ a „git status“.

git log @: Písanie „HEAD“ vyžaduje čas, najmä ak existuje skratka, „@“. Symbol '@' je vybraný, pretože prirodzene sleduje syntax (napr. (u)), ale okrem toho neexistuje žiadna referencia alebo operácia a keď nie je žiadna z nich, 'HEAD “možno predpokladať namiesto @.

1. Odpojená hlava

Je pravdepodobné, že HEAD odkazuje na konkrétnu zmenu, ktorá ešte nebola spojená s názvom vetvy. Toto je situácia, ktorá sa nazýva oddelená HEAD a stáva sa, keď niekto odhlási niečo iné ako (miestnu) vetvu, povedzme konkrétny záväzok, vzdialenú vetvu alebo značku. Oddelená HEAD sa preto môže použiť na odúčtovanie potvrdenia, ktoré neukazuje na počiatočný bod existujúcej vetvy, alebo na vytvorenie úplne nového potvrdenia, na ktoré nemusí nutne odkazovať známa vetva.

Vezmime príklad, kde sa pokladňa zaväzuje b jedným alebo druhým spôsobom

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

Všimnite si, že bez ohľadu na to, ktorý príkaz sa použije, bude HEAD odkázať na potvrdenie b. Tento stav b sa nazýva odpojený stav HEAD.

Pozrime sa na príklady uvedené nižšie, aby sme videli, čo sa stane, keď sa vytvorí záväzok:

git checkout -b foo: Najprv sa vytvorí nová vetva s názvom foo, ktorá je označená ako commit f, ktorá následne aktualizuje HEAD tak, aby ukazovala na foo vetvu. To znamená, že už nebude v oddelenom stave HEAD.

git branch foo: Vytvorí sa nová vetva s názvom foo, ktorá je označená ako commit f, ale HEAD je ponechaný oddelený.

git tag foo: Aj týmto sa vytvorí nová značka s názvom foo, ktorá je označená ako commit f, ale HEAD je ponechaný oddelený.

Predpokladajme, že ste zmenili na inú pozíciu ako commit f, potom sa musí najprv obnoviť názov objektu (zvyčajne sa vykoná pomocou príkazu git reflog) a potom sa vytvorí odkaz.

Na zistenie posledných dvoch potvrdení HEAD, na ktoré sa odkazuje, použite jeden z nasledujúcich príkazov:

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

2. ORIG_HEAD

Existuje ešte jeden druh HEAD, o ktorom by ste mali vedieť. Príkazy „zlúčiť“ alebo „vytiahnuť“ vždy zanechali pôvodnú špičku aktuálnej vetvy v niečo, čo sa nazýva ORIG_HEAD. Môže sa použiť pomocou nasledujúcich príkazov.

git reset –hard ORIG_HEAD: Pomocou tohto tvrdého resetovania sa súbor indexu spolu s pracovným stromom vráti späť do pôvodného stavu, zatiaľ čo špička vetvy sa vynuluje tomuto potvrdeniu, ale zahodí miestne zmeny.

git reset –merge ORIG_HEAD: Ale čo ak si chcete ponechať miestne zmeny, v ktorých môžete použiť príkaz vyššie na udržanie miestnych zmien.n Okrem toho, zlúčenie vždy nastaví '.git / ORIG_HEAD' do pôvodného stavu HEAD, takže problematické zlúčenie sa dá odstrániť pomocou „reset gitu reset ORIG_HEAD“. Okrem toho zlúčenie nastaví „.git / ORIG_HEAD“ do pôvodného stavu HEAD za všetkých okolností, aby sa odstránilo problematické zlúčenie pomocou „git reset ORIG_HEAD“.

Ak máte akýkoľvek problém s viacerými potvrdeniami, ORIG_HEAD je nastavený na začiatočný bod aktuálnej vetvy pred použitím akýchkoľvek opráv, pretože chyba v potvrdeniach sa dá ľahšie opraviť týmto spôsobom.

Výhody Git HEAD

  • Používa sa na poukázanie na nedávno zaviazanú vetvu.
  • Môže sa použiť na vykonanie zmien od posledného navštíveného bodu.
  • Môže sa tiež použiť na presun do rôznych miest v histórii a prácu odtiaľ.
  • Udržuje úložisko a proces čistý a čitateľný.

záver

Git má mnoho použití a je široko používaný vývojármi, produktovými manažérmi a dátovými vedcami. Jeho príkazy sú veľmi efektívne a môžu byť veľmi užitočné. HEAD je odkaz na posledný záväzok v aktuálne odhlásenej vetve.

Odporúčané články

Toto je príručka k téme Čo je Head in Git ?. Tu diskutujeme o ukazovateli HEAD v Gite, ktorý zahŕňa Detached HEAD a ORIG_HEAD spolu s výhodami Git HEAD. Ďalšie informácie nájdete aj v nasledujúcich článkoch -

  1. Čo je Git Fetch?
  2. Git Fetch vs Git Pull
  3. Čo je pobočka Git?
  4. Terminológia Git
  5. Systém riadenia verzií GIT
  6. Git Push
  7. Tri fázy životného cyklu Gitu s pracovným tokom
  8. Ako používať GIT Cherry-pick s príkladom?

Kategórie: