2010-12-08 7 views

Répondre

6

il suffit de pousser les changements de votre branche actuelle

git push origin 

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


Ce que vous voyez est la barre latérale représentant tous les refspecs de votre repo à distance dans le Experimental GitX fork du GitX project.

alt text

Le HEAD désignera la branche par défaut pour cette distance.
Voir git remote set-head man page:

Avoir une branche par défaut pour une distance n'est pas nécessaire, mais permet au nom de la télécommande à préciser au lieu d'une branche spécifique.
Par exemple, si la branche par défaut pour origin est définie sur master, alors origin peut être spécifié à l'endroit où vous spécifiez normalement origin/master.

120

master est une référence à la fin d'une branche. Par convention (et par défaut), il s'agit généralement de la branche d'intégration principale, mais ce n'est pas obligatoire.

HEAD est en fait un type particulier de référence qui pointe vers une autre référence. Il peut pointer vers masterou il ne peut pas (il indiquera quelle branche est actuellement extraite). Si vous savez que vous souhaitez vous engager dans la branche master, appuyez sur pour cela.

Voici un exemple visuel:

alt text

Sur votre dépôt, vous pouvez vérifier où le HEAD pointe vers en exécutant ceci:

$ git symbolic-ref HEAD 
refs/heads/master 

Cependant, savoir où l'remotes/origin/HEAD pointe vers est plus difficile parce que c'est sur la machine distante.

Il y a un grand petit tutoriel sur les références git ici:

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

+1

+1 Une réponse plus précise que la mienne. Voir aussi http://stackoverflow.com/questions/3301956/git-correct-way-to-change-active-branch-in-a-bare-repository/3302018#3302018 et http://stackoverflow.com/questions/ 3301956/git-correct-way-to-change-active-branch-in-a-bare-repository pour des illustrations autour de ces concepts. – VonC

25

La réponse simple est que HEAD est un pointeur/étiquette la plus récente validation de la branche sur laquelle vous êtes actuellement. master est la branche par défaut créée lorsque vous avez initialisé un référentiel git (par exemple, git init).

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

+2

"' HEAD' est un pointeur/label pour la validation la plus récente de la branche sur laquelle vous êtes actuellement. " Je pense que c'est trompeur au mieux. Si vous enregistrez un commit plus ancien, alors HEAD est maintenant un pointeur vers ce commit plus ancien, pas vers le commit le plus récent. Droite? – LarsH

+1

Vous avez raison. HEAD est votre dernière commande. Mais pour ma défense, pour Git, la commande 'checkout' équivaut à changer de branche dans d'autres systèmes SCM courants. – benhorgen

+0

Je sympathise ... Je pourrais facilement avoir fait la même erreur. La seule raison que j'ai remarquée était parce que je suis à l'étape d'essayer de rechercher ce que signifie réellement HEAD. Y a-t-il une chance que vous puissiez éditer votre réponse pour être correcte? Je trouve HEAD être un concept difficile à trouver des descriptions précises de, pour les non-experts git comme moi. Et le fait d'avoir des conseils sur Internet qui donnent des informations * incorrectes sur HEAD le rend un peu plus difficile. – LarsH