web-dev-qa-db-fra.com

Comment puis-je extraire une branche Git distante?

Quelqu'un a poussé une branche appelée test avec git Push Origin test dans un référentiel partagé. Je peux voir la branche avec git branch -r.

J'essaie maintenant de vérifier la branche distante test.

J'ai essayé:

  • git checkout test qui ne fait rien

  • git checkout Origin/test donne * (no branch). Ce qui est déroutant. Comment puis-je être sur "pas de branche"?

Comment puis-je extraire une branche Git distante?

6276
Juri Glass

Mise à jour

réponse de Jakub améliore réellement cela. Avec les versions Git ≥ 1.6.6, avec une seule télécommande, vous pouvez simplement faire:

git fetch
git checkout test

Comme l'utilisateur masukomi le fait remarquer dans un commentaire, git checkout test ne fonctionnera PAS dans git moderne si vous avez plusieurs télécommandes. Dans ce cas, utilisez

git checkout -b test <name of remote>/test

ou la sténographie

git checkout -t <name of remote>/test

Ancienne réponse

Avant de pouvoir travailler localement sur une branche distante, vous devez le récupérer comme indiqué dans les réponses ci-dessous.

Pour récupérer une branche, il vous suffit de:

git fetch Origin

Cela va chercher toutes les branches distantes pour vous. Vous pouvez voir les branches disponibles à la caisse avec:

git branch -v -a

Avec les branches distantes en main, vous devez maintenant vérifier la branche qui vous intéresse, en vous donnant une copie de travail locale:

git checkout -b test Origin/test
8645
hallski

Note: avec Git moderne (> = 1.6.6 ), vous pouvez utiliser juste

git checkout test

(notez qu'il est 'test' et non pas 'Origine/test') d'effectuer une opération magique DWIM - mery et de créer une branche locale 'test', pour laquelle le amont serait une branche de suivi à distance ' Origine/test '.


La sortie * (no branch) dans git branch signifie que vous êtes sur une branche non nommée, dans l'état dit "détaché HEAD" (HEAD pointe directement à valider et n'est pas une référence symbolique à une branche locale). Si vous avez effectué des commits sur cette branche sans nom, vous pouvez toujours créer une branche locale à partir de la validation en cours:

git checkout -b test HEAD
1212
Jakub Narębski

Dans ce cas, vous souhaiterez probablement créer une branche locale test qui suit la branche distante test:

$ git branch test Origin/test

Dans les versions antérieures de git, vous aviez besoin d'une option explicite --track, mais il s'agit de l'option par défaut lorsque vous passez d'une branche distante à une branche.

537
ndim

Réponse acceptée ne fonctionne pas pour vous?

Bien que la première réponse sélectionnée soit techniquement correcte , il est possible que vous n'ayez pas encore récupéré tous les objets et références du référentiel distant. Si tel est le cas, vous recevrez le message d'erreur suivant:

$ git checkout -b remote_branch Origin/remote_branch

fatal: git checkout: la mise à jour des chemins est incompatible avec le changement de branche.
Avez-vous l’intention de extraire "Origin/remote_branch" qui ne peut pas être résolu en tant que commit?

Solution

Si vous recevez ce message, vous devez d'abord effectuer un git fetch OriginOrigin est le nom du référentiel distant avant l'exécution de git checkout remote_branch. Voici un exemple complet avec des réponses:

$ git fetch Origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> Origin/develop
 * [new branch]      demo       -> Origin/demo
   d80f8d7..359eab0  master     -> Origin/master

$ git checkout demo
Branch demo set up to track remote branch demo from Origin.
Switched to a new branch 'demo'

Comme vous pouvez le constater, l'exécution de git fetch Origin a permis d'extraire toutes les branches distantes que nous n'avions pas encore configurées pour effectuer le suivi sur notre ordinateur local. À partir de là, puisque nous avons maintenant une référence à la branche distante, nous pouvons simplement exécuter git checkout remote_branch et nous allons bénéficier des avantages du suivi à distance.

453
Corey Ballou

J'ai essayé la solution ci-dessus, mais cela n'a pas fonctionné. Essayez ceci, ça marche:

git fetch Origin 'remote_branch':'local_branch_name'

Cela va chercher la branche distante et créer une nouvelle branche locale (si elle n’existe pas déjà) avec le nom local_branch_name et en suivre la distante.

236
Sahil kalra

Ce sera DWIM pour une télécommande non nommée Origin ( documentation ):

$ git checkout -t remote_name/remote_branch

Pour ajouter une nouvelle télécommande, vous devez d’abord procéder comme suit:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

Le premier indique à Git que la télécommande existe, le second obtient les commits.

106
tacaswell

Utilisation:

git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>

D'autres réponses ne fonctionnent pas avec Git moderne dans mon cas bénin. Vous devrez peut-être extraire d'abord si la branche distante est nouvelle, mais je n'ai pas vérifié cette affaire.

101
matanster

OK, la réponse est simple ... Vous voyez en gros la branche, mais vous n'avez pas encore de copie locale! ...

Vous devez fetch la branche ...

Vous pouvez simplement aller chercher puis passer à la branche, utilisez la commande d'une ligne ci-dessous pour le faire:

git fetch && git checkout test

J'ai également créé l'image ci-dessous pour que vous puissiez partager les différences, voir comment fonctionne fetch et aussi en quoi il diffère de pull:

git fetch

81
Alireza

Pour cloner un référentiel Git, procédez comme suit:

git clone <either ssh url /http url>

La commande ci-dessus vérifie toutes les branches, mais seule la branche master sera initialisée. Si vous souhaitez utiliser les autres branches, procédez comme suit:

git checkout -t Origin/future_branch (for example)

Cette commande extrait la branche distante et le nom de votre branche locale sera identique à celui de la branche distante.

Si vous souhaitez remplacer le nom de votre succursale locale à la caisse:

git checkout -t -b enhancement Origin/future_branch

Maintenant, le nom de votre branche locale est enhancement, mais celui de votre branche distante est future_branch.

Documentation

53
Madhan Ayyasamy

Tu peux essayer

git fetch remote
git checkout --track -b local_branch_name Origin/branch_name

ou

git fetch
git checkout -b local_branch_name Origin/branch_name
35
uma

Tout d'abord, vous devez faire:

git fetch # Si vous ne connaissez pas le nom de la branche

git fetch Origin branch_name

Deuxièmement, vous pouvez vérifier une succursale distante dans votre section locale en:

git checkout -b branch_name Origin/branch_name

-b créera une nouvelle branche avec le nom spécifié à partir de la branche distante sélectionnée.

30

Les commandes

git fetch --all
git checkout -b <ur_new_local_branch_name> Origin/<Remote_Branch_Name>

sont égaux à

 git fetch --all

puis

 git checkout -b fixes_for_dev Origin/development

Les deux créeront un latest fixes_for_dev à partir de development

28
sreekumar

J'utilise la commande suivante:

git checkout --track Origin/other_remote_branch
26
priyankvex

Si la branche se trouve sur autre chose que la télécommande Origin, j'aime bien procéder comme suit:

$ git fetch
$ git checkout -b second/next upstream/next

Cela permettra de vérifier la branche next de la télécommande upstream dans une branche locale appelée second/next. Ce qui signifie que si vous avez déjà une branche locale nommée next, elle ne sera pas en conflit.

$ git branch -a
* second/next
  remotes/Origin/next
  remotes/upstream/next
24
Kris

aucune de ces réponses n'a fonctionné pour moi. cela a fonctionné:

git checkout -b feature/branch remotes/Origin/feature/branch

17
brianyang

git branch -r indique que le nom de l'objet n'est pas valide, car ce nom de branche ne figure pas dans la liste des branches locales de Git. Mettez à jour votre liste de branches locales depuis Origin avec:

git remote update

Et essayez à nouveau de vérifier votre branche distante.

Cela a fonctionné pour moi.

Je crois que git fetch attire tous branches distantes, ce qui n'est pas ce que l'affiche originale voulait.

16
webdevguy

git fetch && git checkout your-branch-name

15

J'étais coincé dans une situation en voyant error: pathspec 'desired-branch' did not match any file(s) known to git. pour toutes les suggestions ci-dessus. Je suis sur la version 1.8.3.1 de Git.

Donc ceci a fonctionné pour moi:

git fetch Origin desired-branch
git checkout -b desired-branch FETCH_HEAD

L'explication derrière est que j'ai remarqué que lors de l'extraction de la branche distante, celle-ci était extraite dans FETCH_HEAD:

$ git fetch Origin desired-branch
From github.com:MYTEAM/my-repo
    * branch            desired-branch -> FETCH_HEAD
15
alisa

Exécutez simplement _git checkout_ avec le nom de la branche distante. Git va créer automatiquement une branche locale qui suit celle qui est distante:

_git fetch
git checkout test
_

Cependant, si ce nom de branche se trouve dans plusieurs télécommandes distantes, cela ne fonctionnera pas car Git ne sait pas lequel utiliser. Dans ce cas, vous pouvez utiliser soit:

_git checkout --track Origin/test
_

ou

_git checkout -b test Origin/test
_

Dans 2.19 , Git a appris la configuration checkout.defaultRemote , qui spécifie une télécommande avec la valeur par défaut à la résolution d'une telle ambiguïté.

13
Eugene Yarmash

La commande git remote show <Origin name> répertorie toutes les branches (y compris les branches non suivies). Ensuite, vous pouvez trouver le nom de la branche distante que vous devez récupérer.

Exemple:

$ git remote show Origin

Suivez ces étapes pour récupérer des branches distantes:

git fetch <Origin name> <remote branch name>:<local branch name>
git checkout <local branch name > (local branch name should the name that you given fetching)

Exemple:

$ git fetch Origin test:test
$ git checkout test
11
Thushan

D'autres gars et filles donnent les solutions, mais je peux peut-être vous dire pourquoi.

test git checkout qui ne fait rien

Does nothing n'est pas égal à doesn't work, donc je suppose que lorsque vous tapez 'git checkout test' dans votre terminal et que vous appuyez sur la touche Entrée, aucun message ne s'affiche et aucune erreur ne se produit. Ai-je raison?

Si la réponse est "oui", je peux vous en dire la cause.

La cause en est qu'il existe un fichier (ou dossier) nommé 'test' dans votre arbre de travail.

Lorsque git checkout xxx analysé,

  1. Git recherche d'abord xxx comme un nom de branche, mais il n'y a pas de branche nommée test.
  2. Alors Git pense que xxx est un chemin, et heureusement (ou malheureusement), il existe un fichier nommé test. Donc, git checkout xxx signifie ignorer toute modification dans le fichier xxx.
  3. S'il n'y a pas non plus de fichier nommé xxx, alors Git essaiera de créer le xxx conformément à certaines règles. Une des règles est de créer une branche nommée xxx si remotes/Origin/xxx existe.
8
oldman

Pour obtenir les branches nouvellement créées

git fetch

Pour changer de branche

git checkout BranchName
7
Hasib Kamal

Vous pouvez commencer à suivre toutes les branches distantes avec le script Bash suivant:

#!/bin/bash
git fetch --all
for branch in `git branch -r --format="%(refname:short)" | sed 's/Origin\///'`
  do git branch -f --track "$branch" "Origin/$branch"
done

Voici également une version monoligne:

git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/Origin\///'`; do git branch --track "$branch" "Origin/$branch" ; done ;
6
OzzyCzech

Récupérer de la télécommande et extraire la branche.

git fetch <remote_name> && git checkout <branch_name> 

Par exemple.:

fonction git fetch Origin && Git Checkout/XYZ-1234-Ajouter-alertes

6
Pranav

Utilisez fetch pour tirer toute votre télécommande

   git fetch --all

Pour lister les branches distantes:

   git branch -r

Pour lister toutes vos branches

   git branch -l
   >>outpots like-
     * develop
       test
       master

Passer à la caisse/changer de succursale

   git checkout master
2
Nasir Khan

Si le nom de la branche distante commence par des caractères spéciaux, vous devez utiliser des guillemets simples autour de lui dans la commande d'extraction, sinon git ne saura pas de quelle branche vous parlez.

Par exemple, j'ai essayé d'extraire une branche distante nommée #9773 mais la commande n'a pas fonctionné correctement, comme illustré dans l'image ci-dessous:

enter image description here

Pour une raison quelconque, je me suis demandé si le symbole pointu (#) pouvait avoir quelque chose à voir avec cela, puis j'ai essayé d'entourer le nom de la branche de guillemets simples, comme '#9773' plutôt que #9773, et cela a fonctionné. bien.

$ git checkout -b '#9773' Origin/'#9773'
1
Ulysses Alves

Suivez la commande pour créer un dossier vide. Entrez cela et utilisez cette commande:

saifurs-Mini:YO-iOS saifurrahman$ git clone your_project_url
Cloning into 'iPhoneV1'...
remote: Counting objects: 34230, done.
remote: Compressing objects: 100% (24028/24028), done.
remote: Total 34230 (delta 22212), reused 15340 (delta 9324)
Receiving objects: 100% (34230/34230), 202.53 MiB | 294.00 KiB/s, done.
Resolving deltas: 100% (22212/22212), done.
Checking connectivity... done.
saifurs-Mini:YO-iOS saifurrahman$ cd iPhoneV1/
saifurs-Mini:iPhoneV1 saifurrahman$ git checkout 1_4_0_content_discovery
Branch 1_4_0_content_discovery set up to track remote branch 1_4_0_content_discovery from Origin.
Switched to a new branch '1_4_0_content_discovery'
1
Mehedi Hasan