3972 votes

Faire en sorte qu'une branche Git existante suive une branche distante ?

Je sais comment créer une nouvelle branche qui suit les branches distantes, mais comment faire en sorte qu'une branche existante suive une branche distante ?

Je sais que je peux juste modifier le .git/config mais il semble qu'il devrait y avoir un moyen plus facile.

31 votes

Comme indiqué ci-dessous, pour une branche existante, vous pouvez utiliser git push -u origin branch-name .

6 votes

Si la branche locale est la branche courante, et que la branche locale ne suit pas déjà une branche distante, git pull fournira souvent des messages utiles sur la commande appropriée pour définir les informations de suivi.

90 votes

C'est ennuyeux quand on apprend git de se voir montrer un lien vers la documentation git. Cette documentation semble être écrite pour des personnes qui déjà savent ce qu'ils font avec git.

4763voto

Dan Moulding Points 46866

Étant donné une branche foo et une télécommande upstream :

A partir de Git 1.8.0 :

git branch -u upstream/foo

Ou, si la branche locale foo n'est pas la branche actuelle :

git branch -u upstream/foo foo

Ou, si vous aimez taper des commandes plus longues, celles-ci sont équivalentes aux deux précédentes :

git branch --set-upstream-to=upstream/foo

git branch --set-upstream-to=upstream/foo foo

À partir de Git 1.7.0 (avant 1.8.0) :

git branch --set-upstream foo upstream/foo

Notes :

  • Toutes les commandes ci-dessus provoqueront une branche locale foo pour suivre la branche distante foo de l'éloignement upstream .
  • L'ancienne syntaxe (1.7.x) est dépréciée au profit de la nouvelle syntaxe (1.8+). La nouvelle syntaxe est destinée à être plus intuitive et plus facile à mémoriser.
  • La définition d'une branche amont échoue lorsqu'elle est exécutée contre des remotes nouvellement créés qui n'ont pas encore été récupérés. Dans ce cas, exécutez git fetch upstream au préalable.

Voir aussi : Pourquoi dois-je faire `--set-upstream` tout le temps ?

152 votes

Est-ce que "upstream" est le nom de la télécommande ? c'est-à-dire ce que la plupart des gens appelleraient "origin" par défaut ?

190 votes

@Andrew : Oui. git branch --set-upstream master origin/master serait équivalent à ce qui est fait automatiquement lorsque vous clonez initialement un référentiel.

65 votes

Sur une note connexe, ajouter ceci à votre gitconfig est génial : "[push] default=tracking" cela fera en sorte que les pushes iront au même endroit que les pulls :)

272voto

Paul Hedderly Points 1428

Vous pouvez faire ce qui suit (en supposant que vous êtes en check-out sur master et que vous voulez pousser vers une branche master distante) :

Configurez la "télécommande" si vous ne l'avez pas déjà.

git remote add origin ssh://...

Maintenant, configurez le maître pour qu'il sache qu'il faut suivre :

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

Et poussez :

git push origin master

0 votes

Il faut vraiment la télécommande et la branche dans le push ? Je veux dire que vous n'en avez besoin que si la branche que vous avez vérifiée n'est pas celle que vous voulez pousser, non ?

6 votes

Oui - mais de mémoire, il faut être explicite pour la première poussée. Cela peut facilement être testé, bien sûr... :)

0 votes

+1 C'est la réponse pour les utilisateurs de Windows qui sont coincés avec la "preview" de msysgit qui est antérieure à la 1.8. Merci pour cela.

198voto

Greg Bacon Points 50449

Je fais cela comme un effet secondaire de la poussée avec le -u comme dans

$ git push -u origin branch-name

L'option longue équivalente est --set-upstream .

Le site git-branch La commande comprend également --set-upstream mais son utilisation peut prêter à confusion. Version 1.8.0 modifie l'interface.

git branch --set-upstream est déprécié et pourrait être supprimé dans un avenir relativement lointain. git branch [-u|--set-upstream-to] a été introduit avec un ordre d'arguments plus sain.

C'était tentant de dire git branch --set-upstream origin/master mais cela indique à Git d'arranger la branche locale "origin/master" pour qu'elle s'intègre à la branche actuellement extraite, ce qui n'est probablement pas ce que l'utilisateur voulait. Cette option est obsolète ; utilisez la nouvelle option --set-upstream-to (avec une courte et douce -u ) à la place.

Disons que vous avez un local foo et voulez qu'il traite la branche du même nom que son amont. Faites-le avec

$ git branch foo
$ git branch --set-upstream-to=origin/foo

ou simplement

$ git branch --set-upstream-to=origin/foo foo

74voto

Hedgehog Points 1727

Pour les versions de Git 1.8.0 et plus :

En fait, pour que la réponse acceptée fonctionne :

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR Git version 1.8.0 and higher:
git branch --set-upstream-to=upstream/qa
# Gitversions lower than 1.8.0
git branch --set-upstream qa upstream/qa

0 votes

La branche locale suivait déjà une branche, donc nous pouvons supposer que le repo distant a déjà été ajouté.

2 votes

Dopplerganger : Voir le commentaire de Joachim à la réponse acceptée. De toute façon, les hypothèses diffèrent facilement - c'est ce qui rend les choses si intéressantes ;)

61voto

James Mead Points 2432

Vous pourriez trouver le git_remote_branch outil utile. Il propose des commandes simples pour créer, publier, supprimer, suivre et renommer des branches distantes. Une fonctionnalité intéressante est que vous pouvez demander à un grb pour expliquer quelles commandes git il exécuterait.

grb explain create my_branch github
# git_remote_branch version 0.3.0

# List of operations to do to create a new remote branch and track it locally:
git push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch

4 votes

Grb est une gemme ruby qui peut être accédée comme expliqué sur leur github

6 votes

L'OP pose une question sur Git lui-même. Il ne faut donc pas introduire un nouvel outil, ce serait probablement mieux.

0 votes

Grb est un alias pour git-rebase sur mon installation macOS. Je n'ai pas fait ça :)

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