205 votes

Différence entre HEAD et master

Quelle est la différence entre le HEAD y master dans Git ?

J'ai fait un clone d'un projet sur GitHub et je veux pousser mes changements vers le distant. Mais vers lequel dois-je pousser ?

screenshot

177voto

Lee Netherton Points 4712

master est une référence à la fin d'une branche (par convention, il s'agit généralement du "tronc" de l'arbre, pour utiliser un terme du SVN, mais ce n'est pas obligatoire).

HEAD est en fait un type spécial de référence qui pointe vers une autre référence. Elle peut pointer vers master ou pas (il pointera vers la branche qui est actuellement extraite). Si vous savez que vous voulez commiter sur la branche master branche puis pousser jusqu'à ceci.

Voici un exemple visuel :

alt text

Sur votre propre référentiel, vous pouvez vérifier où se trouve le fichier HEAD pointe vers en exécutant ceci :

$ git symbolic-ref HEAD
refs/heads/master

Cependant, trouver où le remotes/origin/HEAD vers lequel il pointe est plus délicat car il se trouve sur la machine distante.

Il existe un excellent petit tutoriel sur les références git ici :

http://people.gnome.org/~federico/news-2008-11.html#pushing-et-pulling-avec-git-1

1 votes

+1 Réponse plus précise que la mienne. Voir aussi stackoverflow.com/questions/3301956/ y stackoverflow.com/questions/3301956/ pour des illustrations autour de ces concepts.

0 votes

Qu'entendez-vous par "fin d'une branche" ? Je pensais que le maître était une branche en soi...

0 votes

Malheureusement, cet excellent tutoriel n'est plus disponible.

51voto

benhorgen Points 240

La réponse simple est que HEAD est un pointeur/étiquette vers le commit le plus récent de la branche sur laquelle vous êtes actuellement. master est la branche par défaut créée lorsque vous avez initialisé un dépôt git (ex. git init ).

Vous pouvez supprimer le master (par exemple git branch -D master ). Vous ne pouvez pas supprimer le HEAD pointeur.

8voto

VonC Points 414372

Il suffit de pousser les changements de votre branche actuelle

git push origin

et il poussera votre branche ' B " devient origin/B '.
Si vous êtes sur votre master git va pousser vers origin/master .
En fait, il va pousser tous les changements sur les branches locales qui ont des branches distantes correspondantes à origin . Il est contrôlé par le paramètre de configuration push.default .
Voir aussi pousser les RefSpecs dans le livre Pro Git .


Ce que vous voyez est la barre latérale représentant toutes les refspecs de votre repo distant dans le fichier Fourchette expérimentale de GitX de la Projet GitX .

alt text

Le site HEAD désignera la branche par défaut pour cette télécommande.
Voir git remote set-head page de manuel :

Il n'est pas nécessaire d'avoir une branche par défaut pour un distant, mais cela permet de spécifier le nom du distant au lieu d'une branche spécifique.
Par exemple, si la branche par défaut de origin est réglé sur master entonces origin peut être spécifié partout où vous spécifieriez normalement origin/master .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X