Co je Head in Git?

Někdy uvidíte dokumentaci Git, která odkazuje na něco, co se nazývá HEAD. Například větev by měla být zcela integrována do HEAD. Ale co přesně je Git HEAD?

V tomto článku se dozvíme více o Git HEAD, ale předtím si jen shrneme, co je Git a k čemu slouží. Git je nástroj pro distribuované řízení, který používají nejen produktoví manažeři a vývojáři, ale také vědci v oblasti dat ke správě vývoje zdrojového kódu programu a jeho historie.

Ukazatel HEAD v Gitu

Git udržuje proměnnou pro odkazování, nazvanou HEAD k poslednímu potvrzení v poslední větev pokladny. Můžete si představit HEAD jako „aktuální angažovanou větev“. A můžeme uvažovat jako o ukazateli, protože účelem této proměnné je ukázat na konkrétní potvrzení v úložišti nebo jednat jako odkaz na konkrétní potvrzení. Řekněme, že uděláme nové potvrzení v repo, poté se ukazatel nebo HEAD přesune nebo změní svou pozici tak, aby ukazovala na nové potvrzení.

HEAD vždy odkazuje na počáteční bod současné větve v úložišti. Lze to považovat za poslední stav nebo poslední rezervovaný bod v úložišti. Jinými slovy, HEAD je ukazatelem na nadřazeného potvrzujícího rodiče nebo tam, kde se stane další odevzdání, protože tam repo skončilo.

Dobrou analogií by byl gramofon a klávesy pro přehrávání a nahrávání na něm jako HEAD. Když zvuk začne nahrávat, páska se pohybuje dopředu a pohybuje se kolem hlavy nahráváním na ni. Tlačítko Stop zastaví nahrávání, zatímco stále ukazuje na místo, kde bylo naposledy nahráno, a na místo, kde se zastavila nahrávací hlava, je to, kde bude pokračovat v nahrávání znovu, když je znovu stisknuto Nahrávat. Pokud se pohybujeme kolem, ukazatel hlavy se přesune na různá místa, avšak při opětovném stisknutí tlačítka Record se začne nahrávat od bodu, na který ukazovala hlava při stisknutí tlačítka Record.

V Gitu můžete pomocí následujícího příkazu zjistit, na co odkazuje ukazatel HEAD.

cat .git / HEAD:

  • Zobrazuje obsah .git / HEAD, jak je uvedeno níže
  • ref: refs / heads / master
  • Jde v podstatě o symbolický odkaz na poslední potvrzenou pobočku, kterou jste odhlásili, a účinně ukazuje na potvrzení na začátku aktuální pobočky.

Kdykoli uděláme nový odevzdání, jak je ukázáno níže, bude přidáno před aktuální HEAD, díky němuž Git automaticky nasměruje HEAD na nové potvrzení.

git diff HEAD..HEAD ~ 3: Přesněji řečeno, HEAD je pohyblivý ukazatel, který by mohl odkazovat na aktuální větev, nebo nemohl, ale vždy se odkazuje na „aktuální potvrzení“. To (aktuální potvrzení) je potvrzení „git commit“ je postaveno na vrcholu a často se porovnává s „git diff –cached“ a „git status“.

git log @: Psaní „HEAD“ je časově náročné, zejména pokud existuje zkratka, „@“. Symbol '@' je vybrán, protože přirozeně následuje syntaxi (např. (u)), ale kromě toho neexistuje žádná reference ani operace, a když žádná z nich není, 'HEAD 'lze předpokládat místo @.

1. Odpojené HEAD

Je pravděpodobné, že HEAD odkazuje na konkrétní změnu, která dosud nebyla spojena s názvem větve. Toto je situace, která se nazývá oddělená HEAD, a to se stane, když někdo odhlásí něco jiného než (místní) větev, řekněme konkrétní potvrzení, vzdálenou větev nebo značku. Odpojené HEAD lze proto použít k pokladně revize, která neukazuje na počáteční bod žádné existující větve, nebo k vytvoření zcela nové revize, na kterou nemusí nutně odkazovat známá větev.

Vezměme si příklad, kde se pokladna zavazuje b jedním nebo druhým způsobem

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

Všimněte si, že bez ohledu na použitý příkaz checkout se nyní HEAD bude odkazovat na potvrzení b. Tento stav b se nazývá odpojený stav HEAD.

Podívejme se na níže uvedené příklady a uvidíme, co se stane, když bude vytvořeno potvrzení:

git checkout -b foo: Nejprve se vytvoří nová větev s názvem foo, která je označena jako commit f, která následně aktualizuje HEAD tak, aby ukazovala na foo větve. To znamená, že již nebude v odděleném stavu HEAD.

git branch foo: Tímto se vytvoří nová větev s názvem foo, která se označuje jako potvrzení f, ale HEAD je ponechán oddělený.

git tag foo: Také to vytvoří novou značku s názvem foo, která se označuje jako potvrzení f, ale HEAD je ponechán oddělený.

Předpokládejme, že jste se změnili na jinou pozici než commit f, potom musí být nejprve obnoven název objektu (obvykle proveden pomocí příkazu git reflog) a poté je vytvořen odkaz na něj.

Chcete-li zjistit, na které poslední dva potvrzené HEAD se odkazuje, použijte některý z následujících příkazů:

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

2. ORIG_HEAD

Je tu ještě jeden druh HEAD, o kterém byste měli vědět. Příkazy „sloučit“ nebo „vytáhnout“ vždy ponechaly původní špičku aktuální větve v něčem, co se nazývá ORIG_HEAD. Lze jej použít pomocí následujících příkazů.

git reset –hard ORIG_HEAD: Tímto resetem hard reset resetujete soubor indexu spolu s pracovním stromem zpět do původního stavu, zatímco resetujete špičku větve k tomuto potvrzení, ale zahodí místní změny.

git reset –merge ORIG_HEAD: Ale co když chcete zachovat místní změny, v tom, že můžete použít výše uvedený příkaz k udržení lokálních změn.n navíc, sloučení vždy nastaví '.git / ORIG_HEAD' do původního stavu HEAD, takže problematické sloučení lze odstranit pomocí 'git reset ORIG_HEAD'. Kromě toho sloučení nastaví '.git / ORIG_HEAD' do původního stavu HEAD za všech okolností, aby se odstranilo problematické sloučení pomocí 'git reset ORIG_HEAD'.

Pokud čelíte jakémukoli problému s více odevzdáním, ORIG_HEAD je nastaven na počáteční bod aktuální větve před použitím jakýchkoli záplat, protože chybu v potvrzeních lze snáze opravit tímto způsobem.

Výhody Git HEAD

  • Používá se k označení nedávno zavázané větve.
  • Může být použit k provedení změn od posledního navštíveného bodu.
  • Může být také použit k přesunu do různých bodů v historii a práci odtamtud.
  • Udržuje úložiště a proces čistý a čitelný.

Závěr

Git má mnoho použití a je široce používán vývojáři, produktovými manažery a datovými vědci. Jeho příkazy jsou velmi efektivní a mohou být velmi užitečné. HEAD je odkaz na poslední potvrzení v aktuálně odhlášené větvi.

Doporučené články

Toto je průvodce Co je Head in Git ?. Zde diskutujeme o ukazateli HEAD v Gitu, který zahrnuje Detached HEAD a ORIG_HEAD spolu s výhodami Git HEAD. Další informace naleznete také v následujících článcích -

  1. Co je Git Fetch?
  2. Git Fetch vs Git Pull
  3. Co je Git Branch?
  4. Terminologie Git
  5. Systém kontroly verzí GIT
  6. Git Push
  7. Tři fáze životního cyklu Gitu s pracovním postupem
  8. Jak používat GIT Cherry-pick s příkladem?

Kategorie: