Quali sono i concetti git di HEAD, master, origine?


197

Mentre sto imparando su git, continuo a trovare i termini HEAD, master, origin, e non sono sicuro di quali siano le differenze. Se capisco correttamente, HEAD è sempre uguale all'ultima revisione? E se è così, è l'ultima revisione dell'intero repository, o di un ramo o tag specifico? Questo è così confuso. Ho letto così tanti tutorial su questo e cose come ramificare / fondere, ma ancora non riesco a farcela.

Risposte:


232

Consiglio vivamente il libro "Pro Git" di Scott Chacon . Prenditi del tempo e leggilo davvero, mentre esplori un vero repository git mentre lo fai.

HEAD : il commit corrente sul quale il tuo repository è attivo. La maggior parte delle volte HEADpunta all'ultimo commit nel tuo ramo corrente, ma non è così. HEADsignifica semplicemente "a cosa punta attualmente il mio repository".

Nel caso in cui il commit si HEADriferisca non è la punta di alcun ramo, questo viene chiamato "testa staccata".

master : il nome del ramo predefinito che git crea per te quando si crea per la prima volta un repository. Nella maggior parte dei casi, "master" significa "il ramo principale". La maggior parte dei negozi ha tutti quelli che spingono verso il master e il master è considerato la visione definitiva del repository. Ma è anche comune che i rami di rilascio siano fatti fuori dal master per il rilascio. Il repository locale ha un proprio ramo master, che segue quasi sempre il master di un repository remoto.

origine : il nome predefinito che git dà al repository remoto principale. La tua scatola ha il suo repository e molto probabilmente spingi verso un repository remoto a cui tu e tutti i tuoi colleghi spingete. Quel repository remoto è quasi sempre chiamato origine, ma non deve esserlo.

HEADè una nozione ufficiale in git. HEADha sempre un significato ben definito. mastere originsono nomi comuni di solito usati in git, ma non devono esserlo.


Cosa intendi con "HEAD significa davvero" a cosa punta attualmente il mio repository "." Se ci sono più rami in un repository, quale è HEAD secondo te? se ci sono 3 rami (insieme al master) e un commit necessario è stato effettuato nel ramo A, HEAD può essere ancora nel commit del 'master'. Quindi, qual è la revisione che il repository punta ora?
OK999,

2
non è chiaro cosa si intende per repository (locale o remoto). In generale, la tua risposta usa espressioni, senza spiegarle prima.

Ho appena fatto un clone in una directory parallela per confrontare la mia directory di lavoro con la punta del repository remoto. Questo è quanto sono buone tutte le risposte git.

@JingHe hai letto l'intero libro? Ne vale davvero la pena? Voglio dire, stiamo parlando di una lettura di oltre 500 pagine, che mi sembra un po 'troppo ...
Max

1
Per verificare di aver compreso la logica, posso chiamare un ramo in remoto come featureA e quando spingo su quel ramo, digito "git push origin featureA". Posso estrarre lo stesso anche dal telecomando dicendo "git pull origin featureA", apportare modifiche. E head si riferisce solo alla copia locale. @ OK999 Credo che HEAD stia indicando il ramo che si è verificato al momento nel locale. Se il commit è stato eseguito in branchA ma attualmente ci si trova in branchB, HEAD punta a branchB. Devi spostare HEAD su branchA prima di eseguire un commit specifico.
Leggi il

43

HEADnon è l'ultima revisione, è la revisione corrente . Di solito, è l'ultima revisione dell'attuale ramo, ma non deve esserlo.

master è un nome comunemente assegnato al ramo principale, ma potrebbe essere chiamato qualsiasi altra cosa (o potrebbe non esserci alcun ramo principale).

originè un nome comunemente assegnato al telecomando principale. remote è un altro repository da cui è possibile estrarre e spingere. Di solito è su alcuni server, come Github.


1
Puoi fare un esempio di quando HEAD è attuale ma non più recente? Non l'ho mai visto prima. O vuoi dire che potrebbe non essere l'ultimo perché il tuo ramo è dietro il ramo remoto che sta monitorando?
Matt Greer,

12
@MattGreer: se dai un'occhiata a qualcosa di più vecchio (come un tag come git checkout v1.1), HEAD passa al commit di quel tag. Potrebbe non essere l'ultimo commit.
Greg Hewgill,

8

Anche se questo non risponde direttamente alla domanda, c'è un ottimo libro disponibile gratuitamente che ti aiuterà a imparare le basi chiamate ProGit . Se preferisci la versione dead-wood a una raccolta di bit, puoi acquistarla da Amazon .


9
La domanda non ha richiesto un libro! Non è ancora chiaro per me, perché avrei bisogno di un libro per Git, quando non ne ho bisogno per C ++.

13
Pensi solo di non aver bisogno di un libro per C ++;)
Piotr Perak il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.