Quels sont les concepts git de HEAD, master, origin?


207

Au fur et à mesure que j'apprends à connaître git, je n'arrête pas de rencontrer les termes HEAD, master, origin, et je ne sais pas quelles sont les différences. Si je comprends bien, HEAD est toujours égal à la dernière révision? Et si oui, est-ce la dernière révision de tout le référentiel, ou d'une branche ou d'une balise spécifique? C'est tellement déroutant. J'ai lu tellement de didacticiels à ce sujet et des choses comme la création de branches / fusions, mais je n'arrive toujours pas à comprendre.


1
“This is so confusing… but still can't wrap my head around it.”Je vois ce que tu as fait là-bas… 😉
elbowlobstercowstand

Réponses:


237

Je recommande vivement le livre "Pro Git" de Scott Chacon . Prenez le temps et lisez-le vraiment, tout en explorant un véritable dépôt git comme vous le faites.

HEAD : le commit actuel de votre repo est activé. La plupart du temps, il s'agit HEADdu dernier commit dans votre branche actuelle, mais ce n'est pas forcément le cas. HEADsignifie simplement "ce que mon repo pointe actuellement".

Dans le cas où le commit HEADfait référence n'est pas la pointe d'une branche, cela s'appelle une "tête détachée".

master : le nom de la branche par défaut que git crée pour vous lors de la première création d'un repo. Dans la plupart des cas, «maître» signifie «la branche principale». La plupart des magasins demandent à tout le monde de maîtriser, et master est considéré comme la vue définitive du repo. Mais il est également courant que les branches de publication soient créées à partir de master pour la publication. Votre dépôt local a sa propre branche principale, qui suit presque toujours le maître d'un dépôt distant.

origin : le nom par défaut que git donne à votre référentiel distant principal. Votre boîte a son propre repo, et vous poussez probablement vers un repo distant vers lequel vous et tous vos collègues poussez. Ce dépôt distant est presque toujours appelé origine, mais ce n'est pas obligatoire.

HEADest une notion officielle dans git. HEADa toujours une signification bien définie. masteret originsont des noms communs généralement utilisés dans git, mais ils ne doivent pas l'être.


Qu'entendez-vous par «HEAD» signifie simplement «ce que mon dépôt pointe actuellement». S'il y a plusieurs branches dans un référentiel, laquelle est la HEAD selon vous? s'il y a 3 branches (avec master) et qu'un besoin de validation a été effectué dans branchA, le HEAD peut toujours être dans le commit du 'master'. Alors, quelle est la révision que le repo pointe maintenant?
OK999

3
ne sait pas ce que vous entendez par repo (local ou distant). En général, votre réponse utilise des expressions, sans les expliquer auparavant.

1
@JingHe Vous avez lu tout le livre? ça en vaut vraiment la peine? Je veux dire que nous parlons de plus de 500 pages lues, cela me semble un peu trop ...
Max

1
Pour vérifier que je comprends la logique, je peux appeler une branche dans remote en tant que featureA et quand je pousse vers cette branche, je tape "git push origin featureA". Je peux également extraire la même chose de la télécommande en disant "git pull origin featureA", apporter des modifications. Et la tête ne fait référence qu'à la copie locale. @ OK999 Je crois que HEAD indique la succursale que vous avez vérifiée en ce moment dans le local. Si le commit a été effectué dans branchA mais que vous êtes actuellement sur branchB, HEAD pointe vers branchB. Vous devez déplacer le HEAD vers branchA avant de faire un commit particulier.
TLee

1
@ShawnFumo Merci pour la suggestion. Je vais probablement y lire. J'espère que ça va être compréhensible sans avoir lu les 9 chapitres avant ça.
Max

48

HEADn'est pas la dernière révision, c'est la révision actuelle . Habituellement, il s'agit de la dernière révision de la branche actuelle, mais ce n'est pas obligatoire.

master est un nom communément donné à la branche principale, mais il pourrait être appelé n'importe quoi d'autre (ou il pourrait ne pas y avoir de branche principale).

originest un nom communément donné à la télécommande principale. remote est un autre référentiel à partir duquel vous pouvez extraire et pousser. Habituellement, c'est sur un serveur, comme github.


1
Pouvez-vous donner un exemple du moment où HEAD est actuel mais pas le plus récent? Je n'ai jamais vu ça auparavant. Ou voulez-vous dire que ce n'est peut-être pas le dernier parce que votre succursale est derrière la succursale distante qu'elle suit?
Matt Greer

13
@MattGreer: Si vous extrayez quelque chose de plus ancien (comme une balise comme git checkout v1.1), votre HEAD se transforme en commit de cette balise. Ce n'est peut-être pas le dernier commit.
Greg Hewgill

7

Bien que cela ne réponde pas directement à la question, il existe un excellent livre disponible gratuitement qui vous aidera à apprendre les bases appelées ProGit . Si vous préférez la version en bois mort à une collection de morceaux, vous pouvez l'acheter sur Amazon .


10
La question ne demandait pas de livre! Je ne sais toujours pas pourquoi j'aurais besoin d'un livre pour git, alors que je n'en ai pas besoin pour C ++.

15
Vous pensez seulement que vous n'avez pas besoin d'un livre pour C ++;)
Piotr Perak
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.