Faire un existant Git branch suivre une branche distante?
Je sais comment créer une nouvelle branche qui assure le suivi à distance des branches, mais comment puis-je faire une branche de la piste une branche distante?
Je sais que je peux juste modifier le .git/config
fichier, mais il semble qu'il devrait y avoir un moyen plus facile.
- Comme indiqué ci-dessous, une branche, vous pouvez utiliser
git push -u origin branch-name
. - Si la section locale est en cours de la branche, et la branche locale n'est pas déjà suivi à distance,
git pull
sera souvent fournir des messages utiles sur la commande appropriée pour définir les informations de suivi - C'est ennuyeux quand on est à apprendre git d'être montré un lien vers le git de la documentation. Que la documentation semble être écrit pour les gens qui déjà savent ce qu'ils font avec git.
- comme de Git 2.10, vous devez d'abord passer à l'intention de la section locale puis
git 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.
doncgit branch --set-upstream-to origin/<branch name>
est la commande en cours de fonctionnement.- Pour les gens à obtenir ce DONC, la question que tout d'abord frappé de la recherche pour
"git remote add" "tracking"
: j'ai besoin d'ajouter un nouveau suivi à distance une branche, que j'ai résolu avecgit remote add gitlab https://[email protected]/group/subgroup/repository.git -t master
suivie pargit push gitlab
. Fonctionne avecgit version 2.18.0
. Le-t
est pourtracking
comme il n'y a pas de--tracking
selonman git remote add
- Pourtant, une simple tâche rendue difficile, voire impossible, par Git.
- il est certainement frustrant que la vérification d'une branche ou d'entreprendre gitflow par intermittence n'a pas de lien entre la direction de la source à distance et de façon aléatoire, de générer des erreurs au lieu de remplir les commandes habituelles. Cela rompt avec les scripts d'installation, ou de chicanes débutants qui dit "suivez ces commandes pour commencer".
Vous devez vous connecter pour publier un commentaire.
Donné une branche
foo
et une distanceupstream
:De Git 1.8.0:
Ou, si la succursale locale
foo
n'est pas la branche courante:Ou, si vous tapez plus de commandes, ils sont équivalents pour les deux ci-dessus:
De Git 1.7.0:
Notes:
foo
pour le suivi à distance de la branchefoo
de distanceupstream
.git fetch upstream
à l'avance.Voir aussi: Pourquoi ai-je besoin de le faire " --set-qui, en amont, tout le temps?
git branch --set-upstream master origin/master
serait équivalent à ce qui est fait automatiquement lorsque vous clonez un dépôt.git branch -r
affichera votre distance branches.git push -u origin foo
viaremotes/
avant. Ainsi, au lieu degit branch --set-upstream master origin/master
, negit branch --set-upstream master remotes/origin/master
.git
, si vous avez récupéré nouvelle succursale à distance et de ne pas avoir une branche locale, puisgit checkout
avec la même branchname automatique de suivi créée branchegit remote -v
The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
origin
et le repo j'ai forké commeupstream
. Ensuite, j'aigit fetch upstream
etgit branch -u origin/foo
foo
est la branche courante d'après la doc, voire 1,8. Depuis que la question ne précise pas si la "branche" est sorti, j'ai l'impression quegit branch -u upstream/foo
etgit branch --set-upstream-to=upstream/foo
doit être supprimé de cette réponse.Vous pouvez effectuer les opérations suivantes (en supposant que vous êtes enregistré sur le maître, et qui veulent aller à une distance de la branche master):
Configurer la télécommande si vous ne l'avez pas déjà
Maintenant configurer le maître de savoir à suivre:
Et pousser:
error: the requested upstream branch 'upstream/master' does not exist
.origin
et pasupstream
.- Je faire cela comme un effet secondaire de la pousser avec la
-u
option comme dansL'équivalent de l'option est
--set-upstream
.La
git-branch
de commande comprend également--set-upstream
, mais son utilisation peut être source de confusion. La Version 1.8.0 modifie l'interface.Dire que vous avez un local
foo
branche et il veut traiter de la branche, par le même nom que son amont. Que cela se produise àou tout simplement
--set-upstream-to=...
est juste ce que je cherchais.Vous pourriez trouver la
git_remote_branch
outil utile. Il propose des commandes simples pour la création, l'édition, la suppression, le suivi & renommer des branches distantes. Une fonctionnalité intéressante est que vous pouvez demander à ungrb
de commande pour expliquer ce que les commandes git il allait exécuter.grb
un standard de la commande? Disponible dans le paquet?Fait pour la accepté de répondre à de travail:
Je crois que dès Git 1.5.x vous pourriez faire une branche locale
$BRANCH
suivre une branche distanteorigin/$BRANCH
, comme ceci.Étant donné que
$BRANCH
etorigin/$BRANCH
existe pas, et vous ne l'avez pas sorti$BRANCH
(commutateur de suite si vous avez), faites:Cette recrée
$BRANCH
de suivi de la branche. Le-f
les forces de la création, malgré$BRANCH
existant déjà.--track
est facultatif si les valeurs par défaut sont en place (qui est, le git-config paramètrebranch.autosetupmerge
est vrai).Remarque, si
origin/$BRANCH
n'existe pas encore, vous pouvez le créer en poussant vos locaux$BRANCH
dans le dépôt distant avec:Suivie par la commande précédente pour promouvoir la branche locale en un suivi de la branche.
git push origin $BRANCH
était ce que je cherchais.git branch -f --track $BRANCH origin/$BRANCH
fait le tour.1 - mise à jour de votre local méta-données à l'aide de : git fetch --tous les
2 - montrer votre distants et les succursales à l'aide de : git branch -a
voir la Capture d'écran suivante
3 - passez à la branche cible que vous souhaitez liée à la distance: à l'aide de
git checkout branchName
exemple :
4 - Lien de votre succursale locale d'une branche distante à l'aide de:
git branch --set-en amont-à nameOfRemoteBranch
N. B : nameOfRemoteBranch : copier à partir de la sortie de l'étape 2 " git branch-r "
Exemple d'utilisation:
Assurez-vous que vous exécutez :
pour être en mesure de pousser sans problème
git-config(1)
page de manuel,tracking
est obsolète synonyme deupstream
.Édition
.git/config
est probablement le plus simple et le plus rapide. C'est ce que les commandes Git pour gérer à distance les branches sont en train de faire, de toute façon.Si vous ne voulez pas de coucher avec le fichier à la main (et il n'est pas difficile à faire), vous pouvez toujours utiliser
git config
de le faire...mais encore une fois, qui va juste modifier le.git/config
fichier, de toute façon.Il y a, bien sûr, les moyens de suivre automatiquement une branche distante lors de l'utilisation de
git checkout
(en passant par le--track
drapeau, par exemple), mais ces commandes fonctionnent avec nouveau branches, pas de celles existantes.À très court
Cela rendra votre
yourLocalBranchName
piste de la branche distante appeléedevelop
.git push -u origin branch
(ou--set-upstream-to
) au lieu--set-upstream
et--track
? Je ne comprends pas très bien pourquoi je devrais utiliser l'un sur l'autre.Pour la 1.6.x, il peut être fait à l'aide de la git_remote_branch outil:
Qui sera la cause de Git pour faire
foo
pisteupstream/foo
.J'utilise la commande suivante (en supposant que votre succursale locale nom est "branch-nom local et distant nom de la branche est de "branche-nom-remote"):
Si à la fois locaux et distants, les branches ont le même nom, puis il suffit de faire les opérations suivantes:
Ici, en utilisant
github
etgit version 2.1.4
, il suffit de faire:Et les télécommandes venir par itelsef, même si pas lié localement:
Mais bien sûr, toujours pas de succursale locale:
Voir? Maintenant, si vous venez de la caisse progresser, il va faire de la magie automatiquement:
Si facile!
Résumé. Il suffit d'exécuter ce 2 commandes:
Par " --track, Option
Après un
git pull
:git checkout --track <remote-branch-name>
Ou:
git fetch && git checkout <branch-name>
Pour la création d'une nouvelle branche, on pourrait utiliser la commande suivante
Pour les déjà créé la branche de créer un lien entre la télécommande, puis à partir de cette branche utiliser la commande ci-dessous
Ce n'est pas une réponse directe à cette question, mais je voulais laisser une note ici, pour quelqu'un qui a peut-être eu le même problème que moi lorsque vous essayez de configurer un en amont de la branche.
Méfiez-vous de pousser.par défaut.
Avec les anciennes versions git, le défaut était correspondant, qui serait la cause de très comportements indésirables si vous avez, par exemple:
Local de la branche "master" suivi de origin/master
Branche à distance "en amont", suivi en amont/master
Si vous avez essayé de "git push" quand on est sur la "en amont" de la branche, avec pousser.par défaut correspondant de git automatiquement essayer de fusionner les locaux de la branche "master" en "amont/master", qui provoque tout un tas de chaos.
Cela donne plus de sane comportement:
git config --global pousser.par défaut en amont
Dans un peu liés façon j'ai essayé d'ajouter un suivi à distance de la branche à une branche, mais n'ont pas accès à ce référentiel à distance sur le système où je voulais ajouter que le suivi à distance de la branche (parce que j'ai souvent exporter une copie de ce repo via insérer à un autre système qui a l'accès à pousser à distance). J'ai trouvé qu'il n'y a aucun moyen de forcer l'ajout d'une branche distante sur le local qui n'avait pas été récupérée (pour local ne savais pas que la branche existé sur la télécommande et je reçois le message d'erreur:
the requested upstream branch 'origin/remotebranchname' does not exist
).En fin de compte j'ai réussi à ajouter les nouveaux, inconnus à distance (sans extraction) par l'ajout d'un nouveau fichier de tête à
.git/refs/remotes/origin/remotebranchname
et la copie de la ref (eyeballing, fut le plus rapide, boiteux comme il était 😉 à partir du système d'accès à l'origine des pensions de la station de travail (avec le repo local où j'ai été l'ajout de la branche distante sur).Une fois que ce fut fait, je pourrais ensuite utiliser
git branch --set-upstream-to=origin/remotebranchname
ou tout simplement par :
passer à la direction si vous n'êtes pas déjà:
exécuter
et vous prêt à :
Vous pouvez alawys prendre un coup d'oeil au fichier de config pour voir ce qui est le suivi de ce qui suit:
Il est également bon de savoir cela, il montre les branches qui sont suivis et ceux qui ne le sont pas. :
Pour quelqu'un qui, comme moi, veut juste de synchroniser votre succursale locale de nom avec la télécommande nom de la direction générale, voici une commande pratique:
Ce serait trop de travail