Comment télécharger une branche avec git?

214

J'ai un projet hébergé sur GitHub. J'ai créé une branche sur un ordinateur, puis j'ai poussé mes modifications vers GitHub avec:

git push origin branch-name

Maintenant, je suis sur un autre ordinateur et je souhaite télécharger cette branche. J'ai donc essayé:

git pull origin branch-name

... mais tout cela a été d'écraser ma branche principale avec les changements dans ma nouvelle branche.

Que dois-je faire pour tirer correctement ma branche distante, sans écraser les branches existantes?

Andrew
la source

Réponses:

377

Grâce à une question connexe , j'ai découvert que je devais "extraire" la branche distante en tant que nouvelle branche locale et spécifier un nouveau nom de branche locale.

git checkout -b newlocalbranchname origin/branch-name

Ou vous pouvez faire:

git checkout -t origin/branch-name

Ce dernier créera une branche qui est également configurée pour suivre la branche distante.


Mise à jour: Cela fait 5 ans que j'ai initialement posté cette question. J'ai beaucoup appris et git s'est amélioré depuis lors. Mon flux de travail habituel est un peu différent maintenant.

Si je veux récupérer les branches distantes, je lance simplement:

git pull

Cela va récupérer toutes les branches distantes et fusionner la branche actuelle. Il affichera une sortie qui ressemble à ceci:

From github.com:andrewhavens/example-project
   dbd07ad..4316d29  master     -> origin/master
 * [new branch]      production -> origin/production
 * [new branch]      my-bugfix-branch -> origin/my-bugfix-branch
First, rewinding head to replay your work on top of it...
Fast-forwarded master to 4316d296c55ac2e13992a22161fc327944bcf5b8.

Maintenant, git connaît mon nouveau my-bugfix-branch. Pour passer à cette branche, je peux simplement exécuter:

git checkout my-bugfix-branch

Normalement, je devrais créer la branche avant de pouvoir la vérifier, mais dans les nouvelles versions de git, c'est assez intelligent pour savoir que vous souhaitez extraire une copie locale de cette branche distante.

Andrew
la source
J'utilise GIT 1.7.2.5, et la commande qui a fonctionné pour moi était: git branch --track XX origin/XX. Votre commande me donne une erreur.
dimitarvp
8
Si vous n'avez pas téléchargé toutes les branches distantes, cela peut échouer. Faites "git remote update" pour les tirer vers le bas.
Ben Walding
1
En fait, il peut être encore plus court "git checkout branch-name". Si le nom de la branche est le même qu'une branche de suivi à distance (c'est-à-dire origine / nom de la branche), alors c'est automatiquement une branche de suivi locale.
DavidN
64

Pour tous les débutants de Git comme moi, voici quelques étapes à suivre pour télécharger un référentiel distant, puis basculez vers la branche que vous souhaitez afficher. Ils abusent probablement de Git d'une manière ou d'une autre, mais cela a fait l'affaire pour moi! :-)

Clonez le référentiel pour lequel vous souhaitez télécharger le code (dans cet exemple, j'ai choisi le projet LRResty sur Github):

$ git clone https://github.com/lukeredpath/LRResty.git
$ cd LRResty

Vérifiez quelle branche vous utilisez à ce stade (il doit s'agir de la branche principale):

$ git branch    
* master

Découvrez la branche que vous voulez, dans mon cas, elle s'appelle 'arcifiée':

 $ git checkout -b arcified origin/arcified
 Branch arcified set up to track remote branch arcified from origin.
 Switched to a new branch 'arcified'

Confirmez que vous utilisez maintenant la branche que vous vouliez:

$ git branch    
* arcified
  master

Si vous souhaitez mettre à jour le code à nouveau ultérieurement, exécutez git pull:

$ git pull
Already up-to-date.
Dan J
la source
"Ils abusent probablement de Git d'une manière ou d'une autre" - non, c'est exactement ça.
Big McLargeHuge
28

Vous pouvez utiliser git remote comme:

git fetch origin

puis configurez une branche locale pour suivre la branche distante comme ci-dessous:

git branch --track [local-branch-name] origin/remote-branch-name

Vous auriez maintenant le contenu de la branche github distante dans local-branch-name.

Vous pouvez passer à ce nom de branche locale et commencer à travailler:

git checkout [local-branch-name]
ardsrk
la source
18

vous pouvez utiliser :

git clone <url> --branch <branch>

pour cloner / télécharger uniquement le contenu de la branche.

Cela m'a été particulièrement utile, car le contenu de ma branche était entièrement différent de la branche principale (bien que ce ne soit généralement pas le cas). Par conséquent, les suggestions énumérées par les autres ci-dessus ne m'ont pas aidé et je finirais par obtenir une copie du maître même après avoir vérifié la branche et fait un git pull.

Cette commande vous donnerait directement le contenu de la branche. Ça a marché pour moi.

Vieux Markus
la source
1
C'est la meilleure réponse. Simple et efficace.
derek
2
Cela ne semble pas fonctionner pour moi. Il dit qu'il y a déjà un dossier avec ce nom (qui, bien sûr, il y en a)
Jonathan Tuzman
1
@Jonathan Il n'ajoutera pas une nouvelle branche à votre existante. Il ne peut être utilisé que pour cloner une nouvelle copie. Je ne vois pas pourquoi il devrait déjà y avoir un dossier avec ce nom si vous n'avez pas déjà cloné le référentiel. Essayez de cloner à un autre endroit.
Old Markus
Ne met pas à jour un projet existant avec une nouvelle branche
Dazzle
16

Accédez au dossier sur votre nouvelle machine que vous souhaitez télécharger à partir de git on git bash.

Utilisez la commande ci-dessous pour télécharger le code de n'importe quelle branche que vous aimez

git clone 'git ssh url' -b 'Branch Name'

Il téléchargera le code de branche respectif.

Srikanta Sahoo
la source
9

Git clone et cd dans le nom du repo:

$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git
Cloning into 'iOS-AppleWach'...
$ cd iOS-AppleWach

Basculez vers la branche (une page GitHub) que je veux:

$ git checkout -b gh-pages origin/gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

Et tirez la branche:

$ git pull
Already up-to-date.

ls:

$ ls
index.html      params.json     stylesheets
Pablo Ezequiel
la source
0

git checkout -b branche / nom

git pull origine branche / nom

Éblouir
la source
0

Tu peux essayer

git fetch <remoteName> <branchName>

Par exemple:

git fetch origin MyRemoteBranch
Bimzee
la source
-8

Créez un nouveau répertoire et faites un clone à la place.

git clone (adresse d'origine) (nom de la succursale)

seisatsu
la source
3
Vous ne pouvez pas cloner simplement une branche dans Git. Seul un clone de référentiel complet peut être effectué.
Alan Haggai Alavi