Je sais comment créer une nouvelle branche qui suit les branches distantes, mais comment faire pour qu'une branche existante suive une branche distante?
Je sais que je peux simplement modifier le .git/config
fichier, mais il semble qu'il devrait y avoir un moyen plus simple.
git
branch
git-branch
Pat Notz
la source
la source
git push -u origin branch-name
.git pull
fournira souvent des messages utiles sur la commande appropriée pour définir les informations de suivigit branch --set-upstream-to origin/<branch>
--set-upstream
produit une erreur:fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
il engit branch --set-upstream-to origin/<branch name>
va de la commande actuelle qui fonctionne.Réponses:
Étant donné une branche
foo
et une télécommandeupstream
:Depuis Git 1.8.0:
Ou, si la branche locale
foo
n'est pas la branche actuelle:Ou, si vous aimez taper des commandes plus longues, celles-ci sont équivalentes aux deux précédentes:
Depuis Git 1.7.0:
Remarques:
foo
à suivre la branchefoo
distante à distanceupstream
.git fetch upstream
au préalable.Voir aussi: Pourquoi dois-je faire `--set-upstream` tout le temps?
la source
git branch --set-upstream master origin/master
serait équivalent à ce qui se fait automatiquement lorsque vous clonez initialement un référentiel.git push -u origin foo
viaVous pouvez effectuer les opérations suivantes (en supposant que vous êtes extrait sur le maître et que vous souhaitez effectuer une transmission vers un maître de branche distant):
Configurez la «télécommande» si vous ne l'avez pas déjà
Maintenant, configurez maître pour savoir pour suivre:
Et poussez:
la source
error: the requested upstream branch 'upstream/master' does not exist
.origin
et nonupstream
.Je fais cela comme un effet secondaire de pousser avec l'
-u
option comme dansL'option longue équivalente est
--set-upstream
.La
git-branch
commande comprend également--set-upstream
, mais son utilisation peut être déroutante. La version 1.8.0 modifie l'interface.Supposons que vous ayez une
foo
branche locale et que vous souhaitiez qu'elle traite la branche par le même nom que son amont. Faites que cela se produise avecou juste
la source
--set-upstream-to=...
est exactement ce que je cherchais.Vous pourriez trouver l'
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 à unegrb
commande d'expliquer quelles commandes git elle exécuterait.la source
En fait, pour que la réponse acceptée fonctionne:
la source
Je crois que dès Git 1.5.x, vous pouviez faire en sorte qu'une branche locale suive
$BRANCH
une branche distanteorigin/$BRANCH
, comme ceci.Étant donné que
$BRANCH
etorigin/$BRANCH
existez et que vous avez pas vérifié$BRANCH
(interrupteur immédiatement si vous avez), faites:Cela recrée
$BRANCH
comme une branche de suivi. La-f
force la création malgré$BRANCH
déjà existante.--track
est facultatif si les valeurs par défaut habituelles sont en place (c'est-à-dire que le paramètre git-configbranch.autosetupmerge
est vrai).Remarque, s'il
origin/$BRANCH
n'existe pas encore, vous pouvez le créer en poussant votre local$BRANCH
dans le référentiel distant avec:Suivi de la commande précédente pour promouvoir la branche locale en une branche de suivi.
la source
git push origin $BRANCH
était ce que je cherchais.git branch -f --track $BRANCH origin/$BRANCH
fait l'affaire.1- Mettez à jour vos méta-données locales en utilisant: git fetch --all
2- Affichez vos succursales distantes et locales en utilisant: git branch -a , voir la capture d'écran suivante
3- passer à la branche cible que vous souhaitez relier à la télécommande: à l'aide
git checkout branchName
exemple :
4- Reliez votre succursale locale à une succursale distante en utilisant:
git branch --set-upstream-to nameOfRemoteBranch
NB: nameOfRemoteBranch : à copier depuis la sortie de l'étape 2 "git branch -r"
Exemple d'utilisation:
la source
Assurez-vous de lancer:
pouvoir pousser sans problème
la source
git-config(1)
la page de manuel,tracking
est synonyme de déconseilléupstream
.L'édition
.git/config
est probablement le moyen le plus simple et le plus rapide. C'est ce que font de toute façon les commandes Git pour gérer les branches distantes.Si vous ne voulez pas nettoyer le fichier à la main (et ce n'est pas si difficile à faire), vous pouvez toujours l'utiliser
git config
pour le faire ... mais encore une fois, cela ne fera que modifier le.git/config
fichier, de toute façon.Il existe bien sûr des moyens de suivre automatiquement une branche distante lors de son utilisation
git checkout
(en passant le--track
drapeau, par exemple), mais ces commandes fonctionnent avec de nouvelles branches, pas celles existantes.la source
En très court
Cela fera de votre
yourLocalBranchName
piste la branche distante appeléedevelop
.la source
git push -u origin branch
(ou--set-upstream-to
) à la place--set-upstream
et--track
? Je ne comprends pas très bien pourquoi je devrais utiliser l'un sur l'autre.Pour 1.6.x, cela peut être fait en utilisant l' outil git_remote_branch :
Cela amènera Git à faire le
foo
suiviupstream/foo
.la source
J'utilise la commande suivante (supposons que le nom de votre branche locale soit "nom-branche-local" et que le nom de la branche distante soit "nom-branche-distant"):
Si les succursales locales et distantes ont le même nom, procédez comme suit:
la source
Ici, en utilisant
github
etgit version 2.1.4
, faites simplement:Et les télécommandes viennent par itelsef, même si elles ne sont pas liées localement:
Mais bien sûr, toujours pas de branche locale:
Voir? Maintenant, si vous venez de vérifier develp, il fera automatiquement la magie:
Si facile!
Sommaire. Exécutez simplement ces 2 commandes:
la source
Utiliser l'option '--track'
Après un
git pull
:git checkout --track <remote-branch-name>
Ou:
git fetch && git checkout <branch-name>
la source
Pour créer une nouvelle branche, nous pourrions utiliser la commande suivante
Pour que la branche déjà créée crée un lien entre distant puis à partir de cette branche, utilisez la commande ci-dessousla source
Ce n'est pas une réponse directe à cette question, mais je voulais laisser une note ici pour toute personne qui pourrait avoir le même problème que moi lors de la tentative de configuration d'une branche en amont.
Méfiez-vous de push.default .
Avec les anciennes versions de git, la valeur par défaut correspondait , ce qui provoquerait un comportement très indésirable si vous avez, par exemple:
Suivi "maître" de la succursale locale vers l'origine / le maître
Suivi "amont" de la branche distante en amont / maître
Si vous avez essayé de "git push" sur la branche "upstream", avec push.default, git essaierait automatiquement de fusionner la branche locale "master" en "upstream / master", provoquant beaucoup de chaos.
Cela donne un comportement plus sain d'esprit:
git config --global push.default en amont
la source
D'une manière quelque peu liée, j'essayais d'ajouter une branche de suivi à distance à une branche existante, mais je n'avais pas accès à ce référentiel distant sur le système où je voulais ajouter cette branche de suivi à distance (car j'exporte fréquemment une copie de ce repo via sneakernet vers un autre système qui a accès pour pousser à cette télécommande). J'ai trouvé qu'il n'y avait aucun moyen de forcer l'ajout d'une branche distante sur le local qui n'avait pas encore été récupérée (donc le local ne savait pas que la branche existait sur la télécommande et j'obtiendrais l'erreur:)
the requested upstream branch 'origin/remotebranchname' does not exist
.À la fin, j'ai réussi à ajouter la nouvelle branche distante auparavant inconnue (sans aller chercher) en ajoutant un nouveau fichier de tête à
.git/refs/remotes/origin/remotebranchname
puis en copiant la référence (le globe oculaire était le plus rapide, boiteux comme il l'était ;-) à partir du système avec accès à l'origine repo au poste de travail (avec le repo local où j'ajoutais la branche distante).Une fois cela fait, je pourrais ensuite utiliser
git branch --set-upstream-to=origin/remotebranchname
la source
ou simplement par:
passez à la branche si vous n'y êtes pas déjà:
courir
et vous êtes prêt à:
Vous pouvez toujours jeter un œil au fichier de configuration pour voir ce qui suit quoi en exécutant:
C'est aussi bien de le savoir, cela montre quelles branches sont suivies et lesquelles ne le sont pas. :
la source
Pour toute personne qui, comme moi, veut simplement synchroniser le nom de votre branche locale avec le nom de la branche distante, voici une commande pratique:
la source
Pour éviter de vous souvenir de ce que vous devez faire chaque fois que vous recevez le message:
Vous pouvez utiliser le script suivant qui définit l' origine comme amont pour la branche actuelle dans laquelle vous vous trouvez.
Dans mon cas, je n'ai presque jamais défini autre chose que l'origine comme valeur par défaut en amont . De plus, je garde presque toujours le même nom de branche pour la branche locale et distante. Donc, ce qui me convient:
la source
Cela fonctionnerait aussi
la source