Message d'erreur déroutant de git

90

J'ai reçu ce message de Git:

Vous avez demandé à extraire de l '«origine» distante, mais vous n'avez pas spécifié de branche. Comme il ne s'agit pas de la télécommande configurée par défaut pour votre branche actuelle, vous devez spécifier une branche sur la ligne de commande.

Quelqu'un peut-il l'expliquer? et plus important comment y remédier?

cinek
la source

Réponses:

89

Vous devez dire à git quelle branche vous voulez extraire des dépôts distants "origin".

Je suppose que vous voulez la branche par défaut (maître), vous git pull origin masterdevriez donc résoudre votre problème.

Voir git help branch, git help pullet git help fetch pour plus d'informations.

p4bl0
la source
2
pour le faire fonctionner, j'ai dû vérifier la branche "master" (il n'y avait pas de branche sélectionnée) et tirer, cela a résolu le problème.
cinek
@cinek: Oui, git pulltire et fusionne avec la branche actuelle, donc son comportement dépend complètement de la branche extraite, et avec une HEAD détachée (aucune branche extraite), il n'y a aucun moyen de savoir quelle branche extraire.
Cascabel
@cinek: Je supposais que vous étiez nouveau dans git donc j'avoue que vous étiez dans un état totalement standard sur le branch master, mon mauvais :-).
p4bl0
86

Pour résoudre ce problème, en supposant que vous êtes sur la masterbranche et que vous souhaitez extraire la masterbranche de la origintélécommande, dans des versions Git suffisamment récentes (1.8 ou plus récentes):

git branch -u origin/master master

(De même pour d'autres succursales et / ou télécommandes.)

Si vous pouvez combiner cela avec une poussée, c'est encore plus court:

git push -u origin master

Par la suite, une plaine git pull / git pushfera ce que vous attendez.


Pendant la série Git 1.7, git branchje n'avais pas le -ucommutateur (seulement git push), et à la place, vous deviez utiliser beaucoup plus longtemps --set-upstream:

git branch --set-upstream master origin/master

Notez l'inversion des arguments par rapport à -u. J'ai falsifié cet ordre plus d'une fois.


Au fait, tous ces éléments sont des raccourcis pour effectuer les opérations suivantes, ce que vous pouvez toujours faire explicitement:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

Avant 1.7, vous deviez le faire de cette façon.

Aristote Pagaltzis
la source
Je pense que la commande en haut (du moins dans ma version de Git) définit l'amont d'une branche appelée "origin" pour être "origin / master". Si votre succursale s'appelle localement "master" je pense que vous voudriez:git branch --set-upstream master origin/master
Evan Donovan
Fait intéressant, l' -uoption n'est pas documentée git branchdans ma version, 1.8.5.3, ce qui rend votre documentation encore plus importante. Et, comme vous le constatez, l'option n'était pas disponible dans la version 1.7. *. Puisque -uc'est l'abréviation de --set-upstream, l'ordre de ses arguments ne devrait-il pas être inversé comme vous l'avez fait en --set-upstreamraison du commentaire de @ EvanDonovan?
plaques de cuisson du
Cependant, lorsque j'utilise la commande you show ( git branch -u origin/master master), cela fonctionne comme prévu / prévu pour moi: "Branch master configuré pour suivre le maître de branche distant depuis l'origine."
plaques de cuisson du
1
@hobs: c'est en fait une perversité de Git. Le -ucommutateur n'est en fait pas la forme courte de --set-upstream. Son ordre des arguments est effectivement inversé par rapport à l'ordre des --set-upstream. Je pense que ce n'est que plus tard que --set-upstream-to(notez le «-to») a été introduit, ce qui -uest maintenant la forme abrégée de.
Aristote Pagaltzis
Hou la la! Confus en effet. Merci d'avoir démêlé cela pour moi.
plaques de cuisson
3

Le message dit exactement de quoi il s'agit. Votre succursale actuelle n'est associée à aucune succursale d' origine (ne suit pas) . Donc, git ne sait pas quoi tirer.

Que faire? Ça dépend...

Dans la plupart des cas d' habitude , vous travaillez hors une branche locale xyz qui ramifié de maître qui est cloné à partir d' origine « maître s. La façon habituelle de le résoudre est de passer en maître et de tirer pour le synchroniser avec l' origine , puis de revenir à xyz et rebase master.

Mais dans votre situation, vous voudrez peut-être faire autre chose. Nous ne pouvons pas le savoir sans connaître les détails de vos succursales et télécommandes et comment vous comptez les utiliser.

Tomek Szpakowicz
la source