Git fetch branche à distance

mon collègue et moi travaillons sur le même dépôt que nous avons divisé en deux branches, chacune techniquement pour des projets différents, mais elles ont des similitudes, donc nous aurons parfois envie de nous remettre au maître *de la branche.

cependant, j'ai la branche. Ma question Est, Comment mon collègue peut tirer cette branche en particulier? Un git clone du repo ne semble pas créer les branches localement pour lui, bien que je puisse les voir vivre sur unfuddle après un pousser sur ma fin.

aussi, quand j'ai fait la branche à l'origine, j'ai fait -b checkout . Vous ne savez pas si ça fait une grande différence?

iMac:test_solar dave$ 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 passées. Mais il n'est certainement pas de travail. Je veux être en mesure de vérifier cette branche et puis pousser et s'engager seulement les branches change de divers collaborateurs ou postes de travail.

1654
demandé sur AshNaz87 2012-03-02 21:06:56

25 réponses

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 , suivi de la branche distante origine/daves_branch . Lorsque vous appuyez sur vos modifications, la branche distante sera mise à jour.

pour la plupart des versions de git:

git checkout --track origin/daves_branch

--track est une abréviation de git checkout -b [branch] [remotename]/[branch] où [nom de l'endroit] est origine dans ce cas et [branch] est deux fois le même, daves_branch dans ce cas.

pour git 1.5.6.5 vous aviez besoin de ceci:

git checkout --track -b daves_branch origin/daves_branch

pour git 1.7.2.3 et plus ceci est suffisant (aurait pu commencer plus tôt mais c'est la confirmation la plus tôt que j'ai pu trouver rapidement):

git checkout daves_branch

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

2304
répondu ralphtheninja 2018-02-05 16:10:03

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

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

... où <rbranch> est la branche distante ou réf source et <lbranch> est le inexistant branche locale ou réf destination vous voulez suivre et que vous voulez probablement nommer la même que la branche distante ou Réf source. C'est expliqué sous options dans l'explication de <refspec> .

Git est si intelligent auto complète 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 poste similaire montre, si vous ne nommez pas la branche locale dans fetch , vous pouvez encore le créer quand vous le vérifiez en utilisant le drapeau -b . c'est à dire: git fetch <remote> <branch> , suivi par git checkout -b <branch> <remote>/<branch> est exactement la même que ma première réponse. Et évidemment si votre repo a un seul remote, alors vous pouvez juste faire git checkout <branch> après fetch et il créera une branche locale pour vous. par exemple: Vous venez de cloner un repo et je veux vérifier d'autres branches à partir de la télécommande.

je crois qu'une partie de la documentation pour fetch peut avoir été copiée mot à mot de pull . En particulier, la section sur <refspec> dans options est la même. Cependant, je ne crois pas que fetch ne sera jamais merge , de sorte que si vous quittez le côté de la destination du côlon vide fetch ne doit rien faire .

NOTE: que git fetch <remote> <refspec> est l'abréviation de git fetch <remote> <refspec>: qui ne ferait donc rien, mais git fetch <remote> <tag> est le même que git fetch <remote> <tag>:<tag> qui devrait copier la télécommande <tag> localement.

je suppose que c'est seulement utile si vous voulez copier une branche distante localement, mais pas nécessairement la vérifier tout de suite. Sinon j'utiliserais la réponse acceptée ci-dessus , ce qui est expliqué en détail dans la première section de la description de la caisse et plus loin dans la options sous l'explication de --track , car il s'agit d'un 1-liner. bien... sorte de 1-liner, parce que vous encore avoir à courir git fetch <remote> d'abord.

FYI: l'ordre du <refspecs> (source:destination) explique la méthode bizarre pré Git-1.7 pour suppression des branches distantes . IE: ne poussez rien dans la destination refspec.

761
répondu Mark Mikofski 2017-05-23 12:02:58

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

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

cela suppose que vous voulez aller chercher à partir de origine . Dans la négative, remplacer origine par nom éloigné .

280
répondu paneer_tikka 2017-01-06 07:24:54

pour vérifier myBranch qui existe à distance et pas un local - 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'
89
répondu David 2013-11-12 03:36:22

utilisez git branch -a (à la fois les branches locales et éloignées) ou git branch -r (seulement les branches éloignées) pour voir tous les télécommandes et leurs branches. Vous pouvez alors faire un git checkout -t remotes/repo/branch à la télécommande et créer une branche locale.

il y a aussi une commande git ls-remote pour voir toutes les références et étiquettes de cette télécommande.

38
répondu Daniel Lee 2013-09-25 13:01:32

le titre et la question sont confondus:

  • Git fetch branche distante
  • Comment mon collègue peut-il tirer cette branche en particulier.

si la question Est Comment puis-je obtenir une branche distante pour travailler avec ou comment git checkout une branche distante, une solution plus simple est:

avec git (>=1.6.6) vous pouvez utiliser:

git checkout <branch_name>

si local <branch_name> n'est pas trouvé, mais il existe une branche de suivi dans exactement une télécommande avec un nom correspondant, traiter comme équivalent à:

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

voir la documentation pour la caisse git

pour votre ami:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
33
répondu Guillaume Vincent 2014-03-31 10:53:41
git checkout -b serverfix origin/serverfix

il s'agit d'une opération assez courante que git fournit la --voie en sténographie:

git checkout --track origin/serverfix

En fait, c'est tellement répandue qu'il y a même un raccourci pour ce raccourci. Si le nom de la branche que vous essayez de vérifier (A) n'existe pas et (b) correspond exactement à un nom sur une seule télécommande, Git va créer 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 utilisez facilement la première version avec un nom de branche local différent:

git checkout -b sf origin/serverfix

maintenant, votre branche locale SF va automatiquement tirer de origin / serverfix.

Source: Pro Git 2e Édition, écrit par Scott Chacon et Ben Straub (coupé pour des raisons de lisibilité)

24
répondu ManuelSchneid3r 2017-09-18 14:13:14

avec cette simple commande:

git checkout -b 'your_branch' origin/'remote branch'
13
répondu Karthik damodara 2018-02-12 19:13:05
git fetch

git branch -r

git checkout <branch_name>
12
répondu John Rodriguez 2013-12-04 21:13:32

vous pouvez aller chercher et vérifier la branche distante en un seul coup aussi: -

git fetch && git checkout the-branch-name
11
répondu Kumar Sambhav 2015-03-25 06:43:02

j'ai tapé

git checkout <branch_name>

et a obtenu

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'
9
répondu Guillaume Guillaume 2015-04-10 22:43:19

la façon la plus facile de le faire, au moins pour moi:

git fetch origin <branchName>
9
répondu James Rochabrun 2017-11-20 01:00:14

parfois on vous demande de ne pas jouer avec la branche principale et de ne travailler que la branche distante (comme on me l'a demandé). Tout ce dont vous avez besoin, c'est de 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 fera en sorte que vous clonez la branche distante à votre succursale locale avec le nom de la branche distante.

maintenant si vous propagez votre code et poussez, le code sera soumis à cette seule branche.

8
répondu ganezdragon 2015-02-06 05:11:05

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

7
répondu Jerome Anthony 2017-11-20 00:42:13

disons que votre télécommande est git@xyz.git et vous voulez sa branche random_branch. Le processus devrait être le suivant:

  1. Vérifiez D'abord la liste de vos télécommandes par

    git remote -v

  2. si vous n'avez pas le git@xyz.git remote dans la sortie de la commande ci-dessus, vous l'ajouteriez par

    git remote add xyz git@xyz.git

  3. maintenant vous pouvez récupérer le contenu de cette télécommande par

    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érifier la liste des succursales par

    git branch -a

Le local la branche my_copy_random_branch traquerait la branche random_branch de votre télécommande.

4
répondu zafar142003 2018-03-06 16:59:13

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

4
répondu tambakoo 2018-04-25 11:37:50

Les étapes sont comme suit;

  1. git fetch origin ou git fetch --all , cela récupérera toutes les branches distantes de votre local et ensuite ceci la deuxième option avec laquelle vous pouvez proceder.

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

alors travailler sur cette branche et vous pouvez vérifier si vous êtes sur cette branche ou non en tapant

git branch

It affiche la branche dans laquelle vous êtes actuellement.

3
répondu Sam 2013-12-26 10:09:11

Si vous connaissez déjà votre branche distante comme si...

git remote
=> One
=> Two

et vous savez le nom de la branche que vous souhaitez vérifier ex. br1.2.3.4 puis faites

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

il ne reste plus qu'à vérifier la succursale

git checkout br.1.2.3.4

faites - en de nouvelles branches.

3
répondu SoEzPz 2015-06-26 17:51:26

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

[remote "randomRemote"]
    url = git@github.com:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

S'il a heads/* pointant vers randomRemote/* , quand vous lancez git fetch randomRemote , il va chercher toutes les branches. Ensuite, vous pouvez juste vérifier cette branche.

autrement", 1519110920"

  1. vous devez ajouter des branches distantes au tracking en utilisant ceci. Vérifiez votre .git/config après l'exécution de cette. Vous comprendrez. git remote set-branches --add randomRemote randomombranch 1519110920"

  2. Exécuter git fetch randomRemote . Ceci va récupérer la branche distante.

  3. Maintenant vous pouvez lancer git checkout randomBranch

2
répondu Vamshi Suram 2017-02-01 14:29:24

vous utilisez "git pull" pour garder vos branches séparées. J'utiliserai les noms de branche et de branche pour aider car 'lbranch' et' rbranch ' est difficile à déchiffrer.

:

  • myteam.unfuddle.com = le serveur Git distant
  • tlc = unfuddle projet de compte où le repo existe
  • daves_branch = nom de la branche distante

    vous, ou n'importe quel collègue, pouvez exécuter ceci pour tirer seulement votre branche, non peu importe le nombre de branches:

    git init
    git pull git@myteam.unfuddle.com:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
    
  • 1
    répondu Andrew 2013-05-22 21:10:02

    simplement essayer

    $git pull origin your_branch_name

    1
    répondu Rizo 2017-12-12 20:44:31

    si vous avez un dépôt qui a été cloné avec --depth 1 alors plusieurs des commandes qui ont été listé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 refermerais le repo, mais il y a peut-être d'autres techniques comme git shallow clone (clone-depth) manque branches distantes

    1
    répondu Colin D 2018-01-24 21:21:03

    une commande simple-" git checkout remote_branch_name " vous aidera à créer une branche locale qui a tous les changements dans la branche distante.

    0
    répondu SIjeesh Kattumunda 2018-01-19 12:34:41

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

    0
    répondu Chris F Carroll 2018-03-11 18:02:34

    ce qui m'a aidé était

    1) pour voir toutes les branches distantes disponibles (par exemple 'remote-branch-name')

    git branch -r
    

    2) Créer une branche locale en utilisant le nom de la branche distante

    git fetch && git checkout 'remote-branch-name'
    
    0
    répondu Arlan T 2018-09-17 02:16:14