Che cos'è Head in Git?

A volte, vedi la documentazione di Git che fa riferimento a qualcosa chiamato HEAD. Ad esempio, The branch dovrebbe essere completamente integrato in HEAD. Ma cos'è esattamente Git HEAD?

In questo articolo, scopriremo di più su Git HEAD, ma prima di tutto riassumiamo cos'è Git e a cosa serve. Git è uno strumento per il controllo distribuito utilizzato non solo dai responsabili di prodotto e dagli sviluppatori ma anche dai data scientist per gestire lo sviluppo del codice sorgente del programma e la sua storia.

Puntatore HEAD in Git

Git mantiene una variabile per il riferimento, chiamata HEAD all'ultimo commit nel recente ramo di checkout. Puoi immaginare HEAD come il "ramo attualmente impegnato". E possiamo pensare a un puntatore, poiché lo scopo di questa variabile è di indicare o agire come riferimento a un particolare commit nel repository. Supponiamo che effettuiamo un nuovo commit nel repository, quindi il puntatore o HEAD si sposterà o cambierà la sua posizione per puntare a un nuovo commit.

HEAD punta sempre al punto iniziale del ramo presente nel repository. Può essere considerato come l'ultimo stato o l'ultimo punto estratto in un repository. In altre parole, HEAD è un puntatore al genitore dei commit successivi o al punto in cui avverrà il commit successivo poiché è da lì che il repository si è interrotto.

Una buona analogia sarebbe un giradischi e i tasti di riproduzione e registrazione su di esso come HEAD. Quando l'audio inizia a registrare, il nastro avanza spostandosi oltre la testa registrando su di esso. Il pulsante Stop arresta la registrazione mentre punta ancora al punto in cui è stata registrata l'ultima volta e il punto in cui la testina di registrazione si è fermata è dove continuerà a registrare di nuovo quando si preme di nuovo Record. Se ci spostiamo, il puntatore della testa si sposta in punti diversi, tuttavia, quando si preme di nuovo Record inizia la registrazione dal punto in cui puntava la testa quando è stato premuto Record.

In Git, puoi usare il comando seguente per vedere cosa punta il puntatore HEAD.

cat .git / HEAD:

  • Mostra i contenuti di .git / HEAD come mostrato di seguito
  • ref: refs / heads / master
  • È fondamentalmente un riferimento simbolico all'ultimo ramo di commit che hai estratto e indica efficacemente il commit all'inizio del ramo corrente.

Ogni volta che eseguiamo un nuovo commit come mostrato di seguito, questo viene aggiunto prima dell'attuale HEAD, il che fa sì che Git punti automaticamente HEAD al nuovo commit.

git diff HEAD..HEAD ~ 3: Più precisamente, HEAD è un puntatore mobile che potrebbe riferirsi al ramo corrente, oppure non potrebbe, ma si riferisce sempre al "commit corrente". It (commit corrente) è il commit "git commit" è costruito sopra e spesso viene confrontato con "git diff –cached" e "git status".

git log @: la digitazione di "HEAD" richiede tempo, soprattutto quando è presente un collegamento, "@". Il simbolo "@" viene scelto perché segue naturalmente la sintassi (ad es. (u)), ma a parte questo non ci sono riferimenti o operazioni e quando non ce ne sono, "HEAD 'può essere assunto al posto di @.

1. TESTA staccata

È plausibile che HEAD indichi una modifica specifica che non è stata ancora collegata a un nome di filiale. Questa è la situazione che si chiama HEAD distaccato e si verifica quando qualcuno verifica qualcosa di diverso da un ramo (locale), ad esempio un commit specifico, un ramo remoto o un tag. Pertanto, HEAD distaccato può essere utilizzato per effettuare il checkout di un commit che non punta al punto di partenza di una succursale esistente o per creare un nuovissimo commit a cui non fa necessariamente riferimento un ramo noto.

Facciamo un esempio in cui controlliamo il commit b in un modo o nell'altro

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

Si noti che, indipendentemente dal comando di checkout utilizzato, HEAD farà ora riferimento al commit b. Questo stato di b è chiamato stato HEAD distaccato.

Diamo un'occhiata agli esempi seguenti per vedere cosa succede quando viene creato un commit:

git checkout -b foo: per prima cosa viene creato un nuovo ramo chiamato foo, che viene chiamato commit f che a sua volta aggiorna HEAD per puntare a branch foo. Ciò significa che non sarà più in uno stato HEAD distaccato.

git branch foo: questo crea un nuovo ramo chiamato foo, che viene chiamato commit f, ma HEAD viene lasciato staccato.

git tag foo: anche questo crea un nuovo tag chiamato foo, che viene chiamato commit f, ma HEAD viene lasciato staccato.

Supponiamo che tu sia cambiato in una posizione diversa dal commit f, quindi il nome dell'oggetto deve essere ripristinato per primo (in genere fatto utilizzando il comando git reflog) e, successivamente, viene creato un riferimento ad esso.

Per scoprire gli ultimi due commit a cui fa riferimento HEAD, utilizzare uno dei comandi seguenti:

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

2. ORIG_HEAD

C'è un altro tipo di HEAD che devi conoscere. I comandi "unisci" o "pull" hanno sempre lasciato la punta originale del ramo corrente in qualcosa chiamato ORIG_HEAD. Può essere utilizzato usando i seguenti comandi.

git reset –hard ORIG_HEAD: Usando questo, reset hard riporta il file indice insieme all'albero di lavoro al suo stato originale, reimpostando la punta del ramo su quel commit, ma scarta le modifiche locali.

git reset –merge ORIG_HEAD: Ma cosa succede se si desidera mantenere le modifiche locali, in quanto è possibile utilizzare il comando precedente per mantenere le modifiche locali. Inoltre, l'unione imposta sempre '.git / ORIG_HEAD' sullo stato originale di HEAD, quindi un'unione problematica può essere rimossa usando 'git reset ORIG_HEAD'. Inoltre, l'unione imposta sempre '.git / ORIG_HEAD' sullo stato originale di HEAD in modo da rimuovere un'unione problematica usando 'git reset ORIG_HEAD'.

Se si riscontrano problemi con più commit, ORIG_HEAD viene impostato sul punto iniziale del ramo corrente prima di applicare eventuali patch in quanto un errore nei commit può essere risolto più facilmente in questo modo.

Vantaggi di Git HEAD

  • Viene utilizzato per indicare la filiale recentemente impegnata.
  • Può essere utilizzato per apportare modifiche dall'ultimo punto visitato.
  • Può anche essere usato per spostarsi in diversi punti della storia e del lavoro da lì.
  • Mantiene il repository e il processo puliti e leggibili.

Conclusione

Git ha molti usi ed è ampiamente utilizzato da sviluppatori, responsabili di prodotto e data scientist. I suoi comandi sono molto efficaci e possono essere molto utili. HEAD è un riferimento all'ultimo commit nel ramo attualmente estratto.

Articoli consigliati

Questa è una guida a What is Head in Git ?. Qui discutiamo il puntatore HEAD in Git che include Detached HEAD e ORIG_HEAD insieme ai vantaggi di Git HEAD. Puoi anche consultare i seguenti articoli per saperne di più -

  1. Che cos'è Git Fetch?
  2. Git Fetch vs Git Pull
  3. Cos'è Git Branch?
  4. Terminologia Git
  5. Sistema di controllo versione GIT
  6. Git Push
  7. Tre fasi del ciclo di vita di Git con il flusso di lavoro
  8. Come usare GIT Cherry-pick con Esempio?

Categoria: