git checkout tag, git pull échoue dans la branche

133

J'ai cloné un référentiel git puis extrait une balise:

# git checkout 2.4.33 -b my_branch

C'est OK, mais quand j'essaye de courir git pulldans ma branche, git crache cette erreur:

Il n'y a aucune information de suivi pour la succursale actuelle. Veuillez spécifier la branche avec laquelle vous souhaitez fusionner. Voir git-pull (1) pour plus de détails

git pull <remote> <branch>

Si vous souhaitez définir des informations de suivi pour cette succursale, vous pouvez le faire avec:

git branch --set-upstream new origin/<branch>

Je veux git pulluniquement mettre à jour la branche master et laisser ma branche actuelle seule (c'est quand même une balise). Est-ce que quelque chose comme ça est possible?

La raison pour laquelle j'en ai besoin est que j'ai un script automatique qui tire toujours le référentiel et échoue bien sûr à cause de l'erreur ci-dessus.

Alesko
la source

Réponses:

114

Edit: Pour les versions plus récentes de Git, --set-upstream mastera été obsolète, vous devriez utiliser à la --set-upstream-toplace:

git branch --set-upstream-to=origin/master master

À l'invite, vous pouvez simplement exécuter:

git branch --set-upstream master origin/master

Après cela, vous pouvez simplement exécuter git pullpour mettre à jour votre code.

Vincent Wen
la source
5
Cela a résolu le problème. Mais je dois encore comprendre comment ma branche principale a perdu la référence à l'origine. J'étais sur une branche et je l'ai fait git checkout master. Je ne pouvais pas faire git pullparce que la référence à l'origine était perdue. Maintenant ça marche. Je vous remercie!
Ariel
'git branch --set-upstream-to = origin / master master my_branch' a fonctionné pour moi
Blue Clouds
90

J'ai eu le même problème et je l'ai corrigé avec cette commande:

$ git push -u origin master

Depuis le fichier d'aide, -u définit essentiellement la valeur par défaut pour les pulls:

-u, --set-upstream`

  For every branch that is up to date or successfully pushed, add 
  upstream (tracking) reference, used by argument-less git-pull(1) and
  other commands. For more information, see branch.<name>.merge in 
  git-config(1).
Simon Raik-Allen
la source
48

Essayez ces commandes:

git pull origin master
git push -u origin master
navins
la source
9

Revenez à la branche principale en utilisant

$ git checkout master

puis exécutez l' git pullopération

$ git pull origin/master

Ensuite, vous pouvez revenir à votre my_branch.

cfedermann
la source
6
C'est exactement ce que j'essaie d'éviter. Je voulais savoir s'il existe une manière «officielle» de le faire.
alesko
5

@alesko : il n'est pas possible de ne faire git pullqu'après le paiement my_branchpour mettre à jour la masterbranche uniquement.
Parce git pullque fusionnera également avec la branche actuelle -> dans votre scénario vers lemy_branch

@Simon : ça fera aussi la poussée. pourquoi donc?

$ git branch -u origin/master
Branch master set up to track remote branch master from origin.

et selon les documents:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.
Casey
la source
4

Tout d'abord, assurez-vous que vous êtes sur la bonne branche.
Puis (une seule fois):

git branch --track

Après cela, cela fonctionne à nouveau:

git pull
drzymala
la source
4

Vous pouvez avoir plusieurs branches. Et votre branche actuelle n'a pas configuré son amont dans Remote.

Étapes pour résoudre ce problème:

git checkout branch_name
git branch --set-upstream-to=origin/remote_branch_name local_branch_name

par exemple

// this set upstream of local branch develop to remote branch  origin/develop,
git branch --set-upstream-to=origin/develop develop

Après cela, lorsque vous faites git pullcela, il extrait de la branche spécifiée.

Eric Wang
la source
3

Vous pouvez spécifier la branche que vous souhaitez extraire:

git pull origin master

Ou vous pouvez le configurer pour que votre branche master locale suive la branche master github en amont:

git branch --set-upstream-to=origin/master master
git pull

Ce suivi de branche est configuré pour vous automatiquement lorsque vous clonez un référentiel (pour la branche par défaut uniquement), mais si vous ajoutez une télécommande à un référentiel existant, vous devez configurer le suivi vous-même. Heureusement, les conseils donnés par git permettent de se rappeler assez facilement comment faire.

--set-upstream est obsolète dans git 1.9.x, apparemment. À l'avenir, vous voudrez utiliser quelque chose comme

git branch -u origin/master

en supposant que vous ayez déjà vérifié master. Sinon, git branch -u origin/master masterfonctionnera

Akash Kandpal
la source
2

Essaye ça

git checkout master

git pull origin master
vanarajcs
la source
2
Cela ne répond pas vraiment à la question. De plus, bien qu'il n'y ait pas de réponse acceptée, celle qui a le mieux voté est beaucoup plus appropriée comme réponse à cette vieille question
fejese
1

Vous devez paramétrer votre tracking (en amont) pour la branche actuelle

git branch --set-upstream master origin/master

Est déjà obsolète au lieu de cela, vous pouvez utiliser l'indicateur --track

git branch --track master origin/master

J'aime aussi la référence doc que @casey remarque:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.
Jorman Bustos
la source
1

Ce qui a fonctionné pour moi était: git branch --set-upstream-to = origin master Quand j'ai refait un pull, je n'ai reçu que les mises à jour de master et l'avertissement a disparu.

Jason D
la source
1

Si, comme moi, vous devez le faire tout le temps, vous pouvez configurer un alias pour le faire automatiquement en ajoutant ce qui suit à votre .gitconfigfichier:

[alias]
    set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`

Lorsque vous voyez le message There is no tracking information..., exécutez simplement git set-upstream, puis à git pushnouveau.

Merci à https://zarino.co.uk/post/git-set-upstream/

rjmunro
la source
0

Pour simplement télécharger les mises à jour:

git fetch origin master

Cependant, cela met simplement à jour une référence appelée origin/master. La meilleure façon de mettre à jour votre local masterserait le paiement / fusion mentionné dans un autre commentaire. Si vous pouvez garantir que votre local mastern'a pas divergé du tronc principal activé origin/master, vous pouvez l' utiliser git update-refpour mapper votre courant mastervers le nouveau point, mais ce n'est probablement pas la meilleure solution à utiliser régulièrement ...

Twalberg
la source
0

Cette commande est obsolète: git branch --set-upstream master origin/master

Donc, lorsque vous essayez de configurer le suivi, voici la commande qui a fonctionné pour moi:

git branch --set-upstream-to=origin/master master
Aaron Lelevier
la source