51 votes

Branche Git nommée origin/HEAD -> origin/master

Je suis relativement nouveau dans le domaine de Git, et j'ai encore du mal à m'y retrouver. J'ai récemment commencé à travailler avec des branches et je me pose quelques questions.

J'ai deux systèmes de développement, un ordinateur de bureau Ubuntu et un MacBookPro. J'ai fait un tas de travail dans une nouvelle organizations sur le système Ubuntu et j'ai effectué des commits et poussé vers mon repo distant. À ce stade, j'avais ces branches :

tauren@ubuntu:/projects$ git branch
  accounting
  master
* organizations

tauren@ubuntu:/projects$ git branch -r
  origin/accounting
  origin/master
  origin/organizations
  origin/superstar

Puis je suis passé au MBP pour tirer la nouvelle branche :

tauren@osx:/projects$ git branch
  accounting
* master

tauren@osx:/projects$ git branch -r
  origin/HEAD -> origin/master
  origin/accounting
  origin/master
  origin/superstar

tauren@osx:/projects$ git pull
   2e20a14..ef35730  accounting -> origin/accounting
   271a1a5..7e947ab  master     -> origin/master
 * [new branch]      organizations -> origin/organizations

tauren@osx:/projects$ git branch
* accounting
  master

tauren@osx:/projects$ git branch -r
  origin/HEAD -> origin/master
  origin/accounting
  origin/master
  origin/organizations
  origin/superstar

Mes questions sont donc les suivantes :

  1. Pourquoi le MBP a une branche origin/HEAD -> origin/master mais pas le système Ubuntu ? Quelle est cette branche ?
  2. Fait git pull tirer automatiquement toutes les nouvelles branches distantes ? Je pensais que je devais lui indiquer le nom des nouvelles branches à extraire. Comme vous pouvez le voir, il a récupéré la branche distante organizations branche sur la commande git pull .

47voto

Jan Krüger Points 5475

HEAD pointe généralement vers la branche en cours de vérification. Dans les référentiels hébergés (bare), il désigne la branche par défaut, c'est-à-dire la branche qui est extraite lorsque vous clonez le référentiel. Ainsi, origin/HEAD vous indique la branche par défaut d'origin.

Je ne sais pas pourquoi il n'est pas présent dans votre dépôt sur le système Ubuntu. Peut-être avez-vous initialement poussé votre code à partir de ce dépôt (lorsque origin était vide et n'avait donc pas encore de HEAD) et ne l'avez jamais mis à jour.

Avoir quelque chose comme l'origine/la tête n'est pas terriblement important dans la pratique, de toute façon. Si vous voulez, vous pouvez utiliser git remote set-head origin -a d'avoir origin/HEAD créé/mise à jour

Pour répondre à votre autre question : si vous exécutez git pull sans arguments, il récupère en fait tout ce qui se trouve sur le site distant ( git fetch est lancé sans arguments, aussi, donc il récupère tout). Tout n'est pas fusionné, cependant. Seules les branches de suivi à distance (ce qui se trouve dans la section git branch -r ) sont mis à jour.

6 votes

Oh, j'ai oublié de mentionner : vous pouvez utiliser git remote set-head origin -a pour que l'origine/la tête soit créée/mise à jour.

3 votes

Le site documentation pour git remote set-head Il est utile de comprendre le but de l'utilisation de e.g. origin/HEAD .

9voto

ulidtko Points 3834

Pour autant que je sache, HEAD n'est pas une branche, mais plutôt un pointeur vers un noeud de l'arbre de l'historique (i.e. un commit). Les fichiers qui résident dans votre copie de travail particulière ont l'état décrit par HEAD .

Habituellement HEAD pointe vers le commit le plus récent dans une branche, ainsi vous avez les fichiers les plus récents dans la copie de travail. Utilisation de git reset HEAD^ vous pouvez déplacer le pointeur vers le commit précédent (c'est à dire annuler le dernier commit dans votre copie locale).

Maintenant, chaque repo git a un HEAD Vérifiez avec git show HEAD . En conséquence, origin/HEAD es HEAD de votre origin à distance.

Maintenant, j'ai trouvé une bonne question décrivant HEAD : Qu'est-ce que HEAD dans Git ?

1 votes

Cela fait 10 ans, mais il est toujours vrai que les branches sont aussi des pointeurs !

8voto

Gabriel Points 31

Il s'agit simplement d'un pointeur vers le maître, un lien symbolique si vous voulez. Vous pouvez le supprimer en toute sécurité en faisant ce qui suit dans un terminal (ou git bash/cygwin pour les utilisateurs de Windows) :

  1. naviguez vers votre référentiel
  2. exécuter : git remote set-head origin -d

maintenant il devrait être parti :

$ git branch -r
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