Vad är Head in Git?

Ibland ser du Git-dokumentationen hänvisar till något som heter HEAD. Till exempel bör filialen vara helt integrerad i HEAD. Men vad är Git HEAD exakt?

I den här artikeln kommer vi att lära oss mer om Git HEAD men innan det ska vi bara sammanfatta vad Git är och vad det har använts för. Git är ett verktyg för distribuerad kontroll som inte bara används av produktchefer och utvecklare utan också datavetare för att hantera programmets källkodutveckling och dess historia.

HEAD-pekaren i Git

Git upprätthåller en variabel för referenser, kallad HEAD till det senaste engagemanget i den senaste kassan. Du kan föreställa dig HEAD som den "nuvarande engagerade grenen". Och vi kan tänka på som en pekare, eftersom syftet med denna variabel är att peka på eller fungera som en hänvisning till ett visst åtagande i förvaret. Säg att vi gör ett nytt engagemang i repo då kommer pekaren eller HEAD att flytta eller ändra sin position för att peka på en ny engagemang.

HEAD pekar hela tiden på utgångspunkten för den nuvarande grenen i förvaret. Det kan ses som det sista tillståndet eller den sista utcheckade punkten i ett förvar. Med andra ord, HEAD är en pekare till nästa förpliktelseförälder eller där nästa engagemang kommer att hända eftersom det är där repoen slutade.

En bra analogi skulle vara en skivspelare och uppspelning och inspelningsknappar på den som HEAD. När ljudet börjar spela in, rör sig bandet framåt och rör sig förbi huvudet genom att spela in på det. Stoppknappen stoppar inspelningen medan den fortfarande pekar på den punkt som det senast spelades in och punkten där inspelningshuvudet stoppades är där det kommer att fortsätta spela in igen när inspelningen trycks in igen. Om vi ​​rör oss, flyttar huvudpekaren till olika platser, men när Record trycks in igen börjar inspelningen från den punkt som huvudet pekade på när Record pressades.

I Git kan du använda kommandot nedan för att se vad HEAD-pekaren pekar.

cat .git / HEAD:

  • Den visar innehållet i .git / HEAD som visas nedan
  • ref: refs / heads / master
  • Det är i princip en symbolisk hänvisning till den senaste åtagna grenen som du checkat ut och pekar effektivt på åtagandet i början av den nuvarande grenen.

När vi gör ett nytt engagemang som visas nedan, läggs det till innan den nuvarande HEAD som gör att Git automatiskt pekar HEAD till den nya commit.

git diff HEAD..HEAD ~ 3: Mer exakt, HEAD är en rörlig pekare som kan hänvisa till den aktuella grenen, eller så kan den inte men den hänvisar alltid till "aktuellt engagemang". Det (nuvarande engagemang) är engagemanget "git commit" bygger ovanpå och jämförs ofta med "git diff – cached" och "git status".

git log @: Att skriva 'HEAD' är tid att ta, särskilt när det finns en genväg, '@' istället. Symbolen '@' väljs eftersom den naturligtvis följer syntax (t.ex. (u)), men förutom att det inte finns någon referens eller operation, och när det inte finns någon av dessa, 'HEAD "kan antas i stället för @.

1. Frånkopplad HEAD

Det är troligt att HEAD pekar på en specifik förändring som ännu inte har kopplats till ett filialnamn. Detta är situationen som kallas en fristående HEAD och det händer när någon kontrollerar något annat än en (lokal) gren, säger en specifik engagemang, en avlägsen gren eller en tagg. Frånkopplad HEAD kan därför användas för att kassera ett engagemang som inte pekar på utgångspunkten för någon befintlig gren, eller för att skapa en helt ny åtagande som inte nödvändigtvis hänvisas till av en känd filial.

Låt oss ta ett exempel där vi checkar ut engagemang b på ett eller annat sätt

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

Observera att oavsett vilken utcheckningskommando som används, kommer HEAD nu att hänvisa till commit b. Denna status för b kallas som fristående HEAD-tillstånd.

Låt oss titta på exemplen nedan för att se vad som händer när ett åtagande skapas:

git checkout -b foo: Först skapas en ny gren med namnet foo, som hänvisas till begå f som i sin tur uppdaterar HEAD att peka på gren foo. Detta innebär att den inte kommer att vara i ett fristående HEAD-tillstånd längre.

git branch foo: Detta skapar en ny gren med namnet foo, som hänvisas till begå f, men HEAD lämnas fristående.

git tag foo: Detta skapar också en ny tag med namnet foo, som refereras till begå f, men HEAD lämnas fristående.

Antag att du ändrade till en annan position än commit f, då måste objektets namn återställas först (vanligtvis görs med hjälp av git reflog-kommandot), och efter det skapas en referens till det.

För att ta reda på de två senaste åtaganden som HEAD refererar till, använd någon av kommandona nedan:

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

2. ORIG_HEAD

Det finns en annan typ av HEAD som du behöver veta om. Kommandona "slå samman" eller "dra" lämnade alltid den ursprungliga spetsen på den nuvarande grenen i något som heter ORIG_HEAD. Det kan användas med följande kommandon.

git reset –hard ORIG_HEAD: Om du använder det här återställer du hårt indexfilen tillsammans med arbetsträdet till sitt ursprungliga läge, samtidigt som spetsen på grenen återställs till den åtagande, men den förkastar de lokala förändringarna.

git reset –merge ORIG_HEAD: Men vad händer om du vill behålla de lokala förändringarna, genom att du kan använda kommandot ovan för att behålla de lokala ändringarna. en problematisk sammanslagning kan tas bort med 'git reset ORIG_HEAD'. Utöver detta sätter sammanslagning '.git / ORIG_HEAD' till det ursprungliga tillståndet för HEAD hela tiden för att ta bort en problematisk sammanslagning med 'git reset ORIG_HEAD'.

Om du har problem med flera åtaganden ställs ORIG_HEAD på startpunkten för den nuvarande grenen innan du applicerar några korrigeringar eftersom ett fel i åtagandena lättare kan åtgärdas på detta sätt.

Fördelar med Git HEAD

  • Det används för att peka på den nyligen engagerade grenen.
  • Det kan användas för att göra ändringar från den senast besökta punkten.
  • Det kan också användas för att flytta till olika punkter i historien och arbeta därifrån.
  • Håller förvaret & processen ren och läsbar.

Slutsats

Git har många användningsområden och används i stor utsträckning av utvecklare, produktchefer och datavetare. Kommandona är mycket effektiva och kan vara mycket användbara. HEAD är en referens till det senaste åtagandet i den för närvarande utcheckade grenen.

Rekommenderade artiklar

Detta är en guide till What is Head in Git ?. Här diskuterar vi HEAD-pekaren i Git som inkluderar Detached HEAD och ORIG_HEAD tillsammans med fördelarna med Git HEAD. Du kan också titta på följande artiklar för att lära dig mer -

  1. Vad är Git Fetch?
  2. Git Fetch vs Git Pull
  3. Vad är Git Branch?
  4. Git-terminologi
  5. GIT-versionskontrollsystem
  6. Git Push
  7. Tre steg av Git-livscykel med arbetsflödet
  8. Hur använder jag GIT Cherry-pick med exempel?

Kategori: