web-dev-qa-db-fra.com

Git chercher une branche distante

Mon collègue et moi travaillons sur le même référentiel que nous avons subdivisé techniquement en deux branches pour des projets différents, mais elles ont des similitudes et nous souhaitons parfois revenir au * master à partir du branch.

Cependant, j'ai le branch. Ma question est la suivante: comment mon collègue peut-il extraire cette branche spécifiquement?

Un git clone de la pension ne semble pas créer les branches localement pour lui, bien que je puisse les voir vivre sans encombre après un Push de mon côté.

De plus, lorsque j'ai créé la branche, j’ai fait -b checkout. Vous ne savez pas si cela fait une grande différence?

$ git branch -r
Origin/HEAD -> Origin/master
Origin/daves_branch
Origin/discover
Origin/master

$ git fetch Origin discover
$ git checkout discover

Ce sont les commandes que j'ai exécutées. Mais cela ne fonctionne vraiment pas.

Je souhaite pouvoir vérifier cette branche, puis envoyer et retransmettre uniquement les modifications de branches de divers collaborateurs ou postes de travail .

1986
David

Vous devez créer une branche locale qui suit une branche distante. La commande suivante va créer une branche locale nommée daves_branch , en suivant la branche distante Origin/daves_branch . Lorsque vous appuyez sur vos modifications, la branche distante sera mise à jour.

Pour les versions les plus récentes de git:

git checkout --track Origin/daves_branch

--track est un raccourci pour git checkout -b [branch] [remotename]/[branch] où [nom de domaine] est Origine dans ce cas et [branche] est deux fois identique, daves_branch dans ce cas.

Pour git 1.5.6.5, vous en aviez besoin:

git checkout --track -b daves_branch Origin/daves_branch

Pour git 1.7.2.3 et supérieur, cela suffit (peut-être commencé plus tôt mais c'est la confirmation la plus ancienne que j'ai pu trouver rapidement):

git checkout daves_branch

Notez qu'avec les versions récentes de git, cette commande ne créera pas de branche locale et vous placera dans un état "détaché". Si vous voulez une branche locale, utilisez l'option --track. Tous les détails ici: http://git-scm.com/book/fr/v2/Git-Branching-Remote-Branches#Tracking-Branches

2714
ralphtheninja

J'ai utilisé fetch suivi de checkout ...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

... où <rbranch> est la branche distante ou la référence de la source et <lbranch> est la non encore existante branche locale ou référence de la destination que vous souhaitez suivre et que vous souhaitez probablement nommer de la même manière que la branche distante ou la référence de la source. Ceci est expliqué sous options dans l'explication de <refspec>.

Git est si intelligent qu'il termine automatiquement la première commande si je onglet après les premières lettres de la branche distante. IE: Je n'ai même pas besoin de nommer la branche locale, Git copie automatiquement le nom de la branche distante pour moi. Merci Git!

Aussi comme la réponse dans ce SO post similaire indique que, si vous ne nommez pas la branche locale dans fetch, vous pouvez toujours la créer lorsque vous extrayez-la en utilisant le -b drapeau. IE: git fetch <remote> <branch> suivi de git checkout -b <branch> <remote>/<branch> fait exactement la même chose que ma réponse initiale. Et évidemment, si votre référentiel a une seule télécommande, vous pouvez simplement faire git checkout <branch> après fetch et il créera une branche locale pour vous. EG: Vous venez de cloner un référentiel et souhaitez extraire des branches supplémentaires de la télécommande.

Je crois qu'une partie de la documentation pour fetch a peut-être été copiée telle quelle pull . En particulier, la section sur <refspec> dans options est la même. Cependant, je ne crois pas que fetch sera jamais merge , de sorte que si vous laissez le côté de destination du deux-points vide, fetch ne devrait rien faire .

REMARQUE: git fetch <remote> <refspec> est l'abréviation de git fetch <remote> <refspec>: qui ne ferait donc rien, mais git fetch <remote> <tag> est identique à git fetch <remote> <tag>:<tag> qui doit copier le <tag> distant.

Je suppose que cela n’est utile que si vous souhaitez copier une branche distante localement, sans nécessairement le vérifier immédiatement. Sinon, je voudrais maintenant utiliser la réponse acceptée ci-dessus , ce qui est expliqué en détail dans la première section de description de la commande et plus tard dans la section options sous l'explication de --track, puisqu'il s'agit d'une ligne. Eh bien ... une sorte de ligne 1, parce que vous encore devez exécuter git fetch <remote> en premier.

FYI: L’ordre du <refspecs> (source: destination) explique la bizarre méthode antérieure à Git-1.7 pour supprimer des branches distantes . IE: rien pousser dans le refspec de destination.

884
Mark Mikofski

Si vous essayez de "valider" une nouvelle branche distante (qui n'existe que sur la télécommande, mais pas localement), voici ce dont vous avez besoin:

git fetch Origin
git checkout --track Origin/<remote_branch_name>

Cela suppose que vous voulez récupérer Origin. Sinon, remplacez Origin par votre nom distant.

340
paneer_tikka

Pour utiliser myBranch qui existe à distance et non localement, cela a fonctionné pour moi:

git fetch --all
git checkout myBranch

J'ai eu ce message:

Branch myBranch set up to track remote branch myBranch from Origin
Switched to a new branch 'myBranch'
111
David

Utilisez git branch -a (branches locales et distantes) ou git branch -r (uniquement les branches distantes) pour voir toutes les télécommandes et leurs branches. Vous pouvez ensuite effectuer un git checkout -t remotes/repo/branch sur la télécommande et créer une branche locale.

Il existe également une commande git ls-remote pour afficher toutes les références et les balises de cette télécommande.

46
Daniel Lee

Le titre et la question sont confus:

  • Git chercher une branche distante
  • comment mon collègue peut-il tirer cette branche spécifiquement.

Si la question est de savoir comment faire fonctionner une branche distante ou comment git checkout une branche distante, une solution plus simple consiste à:

Avec git (> = 1.6.6), vous pouvez utiliser:

git checkout <branch_name>

Si le fichier local <branch_name> n’est pas trouvé, mais qu’il existe une branche de suivi dans exactement une télécommande avec un nom correspondant, considérez comme équivalent à:

git checkout -b <branch_name> --track <remote>/<branch_name>

voir la documentation de git checkout

Pour ton ami:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
37
Guillaume Vincent
git checkout -b serverfix Origin/serverfix

C’est une opération assez commune pour que git fournisse le raccourci --track:

git checkout --track Origin/serverfix

En fait, cela est si courant qu’il existe même un raccourci pour ce raccourci. Si le nom de la branche que vous essayez de commander (a) n’existe pas et que (b) correspond exactement à un nom sur une seule télécommande, Git créera une branche de suivi pour vous:

git checkout serverfix

Pour configurer une branche locale avec un nom différent de celui de la branche distante, vous pouvez facilement utiliser la première version avec un nom de branche local différent:

git checkout -b sf Origin/serverfix

Maintenant, votre filiale locale sf tirera automatiquement de Origin/serverfix.

Source: Pro Git 2nd Edition, écrit par Scott Chacon et Ben Straub (coupé pour la lisibilité)

28
ManuelSchneid3r

Avec cette simple commande:

git checkout -b 'your_branch' Origin/'remote branch'
21
Karthik damodara

La façon la plus simple de le faire, du moins pour moi:

git fetch Origin <branchName>
15
James Rochabrun

Ce qui m'a aidé était

1) Pour afficher toutes les branches distantes disponibles (par exemple, 'nom-branche-distante')

git branch -r

2) Créer une branche locale à l'aide d'un nom de branche distante

git fetch && git checkout 'remote-branch-name'
14
Arlan T

Vous pouvez aussi chercher et extraire la branche distante d'un coup: -

git fetch && git checkout the-branch-name
13
Kumar Sambhav
git fetch

git branch -r

git checkout <branch_name>
13
John Rodriguez

J'ai tapé $

git checkout <branch_name>

et j'ai

Branch <branch_name> set up to track remote branch <branch_name> from Origin.
Switched to a new branch '<branch_name>'
12

Pour récupérer une branche qui existe à distance, le moyen le plus simple est de:

git fetch Origin
git checkout branchName

Vous pouvez voir s'il existe déjà à distance avec:

git branch -r

Cela récupérera la branche distante chez votre correspondant et suivra automatiquement la branche distante.

11
Harshit Agarwal

Il vous est parfois demandé de ne pas manipuler la branche principale et de ne travailler que sur la branche distante (comme on me l'a demandé). Donc, tout ce dont vous avez besoin est la branche distante.

Donc, pour cloner la branche distante seule (sans le maître), faites ceci

git clone url --branch remote_branch_name

où remote_branch_name est le nom de la branche distante

Par exemple,

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15

Cela garantira que vous clonez la branche distante sur votre branche locale avec le nom de la branche distante.

Maintenant, si vous validez votre code et Push, le code sera soumis à cette seule branche.

10
ganezdragon

git fetch --all & git checkout <branch name>

7
Jerome Anthony

Disons que votre télécommande est [email protected] et que vous voulez sa branche random_branch. Le processus devrait être le suivant:

  1. Commencez par vérifier la liste de vos télécommandes par

    git remote -v

  2. Si vous n'avez pas la télécommande [email protected] dans la sortie de la commande ci-dessus, vous l'ajouteriez par

    git remote add xyz [email protected]

  3. Maintenant, vous pouvez récupérer le contenu de cette télécommande en

    git fetch xyz

  4. Maintenant, vérifiez la branche de cette télécommande par

    git checkout -b my_copy_random_branch xyz/random_branch

  5. Vérifiez la liste des branches par

    git branch -a

La branche locale my_copy_random_branch suivrait la branche random_branch de votre télécommande.

7
zafar142003

Je veux vous donner la commande oneliner pour récupérer toutes les branches distantes sur votre réseau local et basculer vers votre branche locale nouvellement créée souhaitée:

git fetch && git checkout discover

après avoir exécuté la commande ci-dessus, vous obtiendrez le message ci-dessous:

Switched to a new branch 'discover'
Branch discover set up to track remote branch discover from Origin.

les états de la première ligne qui sont passés à Nouvelle branche - pourquoi new? il est déjà là dans la télécommande!.

Mais en réalité, vous devez également la créer localement, la branche est extraite de l'index distant et créée localement pour vous.

Ici discover est une nouvelle branche créée à partir de la branche distante de votre référentiel discover.

Mais la deuxième ligne donne plus d’informations que la première qui nous dit que:

notre branche est configurée jusqu'à suivre une branche distante avec le même nom.

Bien que git fetchrécupère toutes les branches en local Mais si vous exécutez git branch après cela, vous ne verrez que master branche en local pourquoi?

parce que pour chaque branche distante, vous devez la créer localement aussi, pour la suivre comme git checkout <branchname> comme nous l'avons fait dans l'exemple ci-dessus.

après avoir exécuté la commande git checkout, vous pouvez exécuter git branch et vous pouvez maintenant voir la branche:

  1. maîtriser et 2. découvrir dans votre liste locale.
6
Haritsinh Gohil

essayez simplement

$ git pull Origin votre_nom_branch

6
Rizo

git fetch && git checkout <your friend's branch name> devrait faire l'affaire

6
tambakoo

Les étapes sont les suivantes;

  1. git fetch Origin ou git fetch --all, toutes les branches distantes seront récupérées sur votre réseau local, puis vous pourrez utiliser la deuxième option.

  2. git checkout --track Origin/<The_remote_branch you want to switch over>

Puis travaillez sur cette branche et vous pourrez vérifier si vous y êtes ou non en tapant

git branch

Il affiche la branche dans laquelle vous vous trouvez actuellement.

3
Sam

Si vous connaissez déjà votre branche distante, alors ...

git remote
=> One
=> Two

et vous connaissez le nom de la succursale que vous souhaitez commander ex. br1.2.3.4 alors faites

git fetch One
=> returns all meta data of remote i.e. the branch name in question.

il ne reste plus qu'à passer à la caisse

git checkout br.1.2.3.4

Ensuite, créez de nouvelles branches.

3
SoEzPz

si vous souhaitez aller chercher toutes les branches distantes, veuillez simplement taper

git fetch --all

J'espère que cela aidera quelqu'un d'autre à voir toutes les branches distantes.

3
Ishwor Khanal

Vérifiez votre .git/config, en particulier quel suivi est présent sur fetch pour cette télécommande.

[remote "randomRemote"]
    url = [email protected]:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

Si heads/* pointe sur randomRemote/*, lorsque vous exécutez git fetch randomRemote, toutes les branches seront récupérées. Ensuite, vous pouvez simplement vérifier cette branche.

Autrement,

  1. Vous devez ajouter des branches distantes au suivi à l'aide de cette option. Vérifiez votre .git/config après l'avoir exécuté. Tu comprendras. git set-branches distantes --add randomRemote randomBranch

  2. Exécutez git fetch randomRemote. Cela va chercher la branche distante.

  3. Maintenant vous pouvez lancer git checkout randomBranch

2
Vamshi Suram

Si vous avez un référentiel cloné avec --depth 1, la plupart des commandes répertoriées ne fonctionneront pas. Par exemple voir ici

% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch Origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
 * branch            other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%

Dans ce cas, je referais le rapport, mais il existe peut-être d'autres techniques, par exemple. le clone peu profond de git (clone --depth) manque des branches distantes

2
Colin D

git branch <name> --track Origin/<name>

1
Chris F Carroll

Vous utilisez 'git pull' pour séparer vos branches. Je vais utiliser des noms de référents et de branches pour vous aider, car 'lbranch' et 'rbranch' sont difficiles à déchiffrer.

Utilisons:

  • myteam.unfuddle.com = le serveur git distant
    • tlc = compte vide du projet où le référentiel existe
    • daves_branch = nom de la branche distante

      Vous, ou n'importe quel collègue, pouvez exécuter ceci pour ne tirer que votre branche, quel que soit le nombre de branches:

       git init 
       git pull [email protected]: mon équipe/tlc daves_branch: réfs/télécommandes/origine/daves_branch 
      
  • 1
    Andrew

    Une simple commande - "git checkout remote_branch_name" vous aidera à créer une branche locale contenant toutes les modifications apportées à la branche distante.

    0
    SjK