Hva er Head in Git?

Noen ganger ser du Git-dokumentasjonen referere til noe som heter HEAD. For eksempel skal filialen være fullstendig integrert i HEAD. Men hva er egentlig Git HEAD?

I denne artikkelen får vi vite mer om Git HEAD, men før det la oss bare oppsummere hva Git er og hva det brukes til. Git er et verktøy for distribuert kontroll som ikke bare brukes av produktledere og utviklere, men også dataforskere for å administrere kildekodeutviklingen til programmet og dets historie.

Hode-pekeren i Git

Git opprettholder en variabel for referanser, kalt HEAD til den siste forpliktelsen i den siste kassen. Du kan forestille deg HEAD som den “nåværende engasjerte grenen”. Og vi kan tenke på som en peker, ettersom formålet med denne variabelen er å peke på eller fungere som en referanse til en bestemt forpliktelse i depotet. Si at vi gjør en ny forpliktelse i repoen, så pekeren eller HEAD kommer til å flytte eller endre sin posisjon for å peke på en ny forpliktelse.

HEAD peker til utgangspunktet for den nåværende grenen i depotet til enhver tid. Det kan tenkes på som den siste tilstanden eller det siste sjekkede punktet i et depot. Med andre ord, HEAD er en peker til neste forpliktende foreldre, eller der neste engasjement kommer til å skje, da det var der repoen slapp.

En god analogi ville være en platespiller og avspilling og opptakstastene på den som HEAD. Når lyden begynner å spille inn, beveger båndet seg fremover og beveger seg forbi hodet ved å spille inn på det. Stoppknapp stopper innspillingen mens den fremdeles peker til det punktet det sist ble spilt inn, og punktet som platehodet stoppet er der det vil fortsette å ta opp igjen når posten trykkes inn igjen. Hvis vi beveger oss, flytter hodeviseren til forskjellige steder, men når du trykker på posten igjen, begynner du å ta opp fra det punktet hodet pekte på da posten ble trykket.

I Git kan du bruke kommandoen nedenfor for å se hva HEAD-pekeren peker.

cat .git / HEAD:

  • Den viser innholdet i .git / HEAD som vist nedenfor
  • ref: refs / heads / master
  • Det er i utgangspunktet en symbolsk henvisning til den siste engasjerte grenen som du sjekket ut og peker effektivt på forpliktelsen i begynnelsen av den nåværende grenen.

Hver gang vi gjør en ny forpliktelse som vist nedenfor, blir den lagt til før den gjeldende HEAD, som gjør at Git automatisk peker HEAD til den nye commit.

git diff HEAD..HEAD ~ 3: Mer presist, HEAD er en bevegelig peker som kan referere til den nåværende grenen, eller den kunne ikke, men den refererer alltid til "gjeldende forpliktelse". Det (gjeldende forpliktelse) er forpliktelsen “git commit” er bygget oppå, og blir ofte sammenlignet med “git diff – cached” og “git status”.

git log @: Det å ta 'HEAD' er tid å ta, spesielt når det er en snarvei, '@' i stedet. Symbolet '@' er valgt fordi det naturlig følger syntaks (f.eks. (u)), men annet enn at det ikke er noen referanse eller operasjon, og når det ikke er noen av disse, 'HEAD 'kan antas i stedet for @.

1. Frittliggende HOVED

Det er sannsynlig for HEAD å peke på en spesifikk endring som ikke har blitt koblet til et filialnavn ennå. Dette er situasjonen som kalles en løsrevet HEAD, og ​​det skjer når noen sjekker ut noe annet enn en (lokal) gren, si en spesifikk forpliktelse, en ekstern gren eller en tag. Derfor kan løsrevet HEAD brukes til å sjekke en engasjement som ikke peker til utgangspunktet for en eksisterende gren, eller for å lage en helt ny forpliktelse som ikke nødvendigvis er referert til av en kjent gren.

La oss ta et eksempel der vi kasserer forpliktelse b på en eller annen måte

  • git checkout master ^#eller
  • git kassa v3.1

Legg merke til at uansett hvilken utsjekkskommando som brukes, vil HEAD nå referere til commit b. Denne statusen til b kalles som løsrevet HEAD-tilstand.

La oss se på eksemplene nedenfor for å se hva som skjer når en forpliktelse opprettes:

git checkout -b foo: Først opprettes en ny gren som heter foo, som refereres til å begå f som igjen oppdaterer HEAD for å peke på gren foo. Dette betyr at den ikke vil være i en løsrevet HEAD-tilstand lenger.

git branch foo: Dette oppretter en ny gren som heter foo, som refereres til å begå f, men HEAD blir stående løsrevet.

git tag foo: Dette oppretter også en ny tag som heter foo, som refereres til å begå f, men HEAD blir stående løsrevet.

Anta at du har endret til en annen posisjon enn commit f, så må objektnavnet gjenopprettes først (vanligvis gjort ved å bruke git reflog-kommandoen), og etter det opprettes en referanse til den.

For å finne ut de to siste forpliktelsene HEAD referert til, bruk en av kommandoene nedenfor:

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

2. ORIG_HEAD

Det er en annen type HOVED som du trenger å vite om. Kommandoene “flette” eller “trekke” forlot alltid den opprinnelige spissen av den nåværende grenen i noe som heter ORIG_HEAD. Den kan brukes ved å bruke følgende kommandoer.

git reset –hard ORIG_HEAD: Ved å tilbakestille hardt bringer indeksfilen sammen med arbeidertreet tilbake til sin opprinnelige tilstand, samtidig som spissen på grenen tilbakestilles til den forpliktelsen, men den forkaster de lokale endringene.

git reset –merge ORIG_HEAD: Men hva om du vil beholde de lokale endringene, ved at du kan bruke kommandoen ovenfor for å beholde de lokale endringene. en problematisk sammenslåing kan fjernes ved å bruke 'git reset ORIG_HEAD'. I tillegg til dette setter fusjon '.git / ORIG_HEAD' til den opprinnelige tilstanden til HEAD til enhver tid for å fjerne en problematisk sammenslåing ved å bruke 'git reset ORIG_HEAD'.

Hvis du har problemer med flere forpliktelser, er ORIG_HEAD satt til startpunktet for den nåværende grenen før du bruker noen oppdateringer, da en feil i forpliktelsene lettere kan løses på denne måten.

Fordeler med Git HEAD

  • Den brukes til å peke på den nylig engasjerte grenen.
  • Den kan brukes til å gjøre endringer fra sist besøkte punkt.
  • Det kan også brukes til å flytte til forskjellige punkter i historien og jobbe derfra.
  • Holder depotet og prosessen ren og lesbar.

Konklusjon

Git har mange bruksområder og blir mye brukt av utviklere, produktledere og dataforskere. Kommandoene er veldig effektive og kan være veldig nyttige. HEAD er en referanse til den siste forpliktelsen i den for øyeblikket utsjekkede grenen.

Anbefalte artikler

Dette er en guide til Hva er hodet i Git ?. Her diskuterer vi HEAD Pointer i Git som inkluderer Detached HEAD og ORIG_HEAD sammen med Fordeler ved Git HEAD. Du kan også se på følgende artikler for å lære mer -

  1. Hva er Git Fetch?
  2. Git Fetch vs Git Pull
  3. Hva er Git Branch?
  4. Git terminologi
  5. GIT versjonskontrollsystem
  6. Git Push
  7. Tre stadier av Git-livssyklus med arbeidsflyten
  8. Hvordan bruker jeg GIT Cherry-pick med eksempel?

Kategori: