Comment puis-je vérifier une branche distante de Git?
Quelqu'un a poussé une branche appelée test
avec git push origin test
vers un dépôt partagé. Je vois la branche avec git branch -r
.
J'essaie de vérifier la branche test
.
j'ai essayé:
-
git checkout test
qui ne fait rien -
git checkout origin/test
donne* (no branch)
. Ce qui est source de confusion. Comment puis-je être sur le pas de la branche"?
Comment puis-je vérifier une succursale Git à distance?
24 réponses
mise à Jour
Jakub la réponse de fait améliore sur ce point. Avec les versions Git ≥ 1.6.6, vous pouvez simplement faire:
git fetch
git checkout test
(l'utilisateur masukomi souligne ci-dessous que git checkout test
ne fonctionnera pas en git moderne si vous avez plusieurs télécommandes. Dans ce cas, utilisez git checkout -b test <name of remote>/test
).
Vieille Réponse
Avant de commencer à travailler localement sur une branche distante, vous devez chercher comme dans les réponses ci-dessous.
pour aller chercher une branche, il suffit de:
git fetch origin
ceci va chercher toutes les branches éloignées 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, vous donnant une copie de travail locale:
git checkout -b test origin/test
Note: moderne Git (>= 1.6.6 ), vous êtes en mesure d'utiliser seulement les
git checkout test
(notez qu'il s'agit de 'test' et non 'origin/test') pour exécuter magical DWIM - mery et créer une branche locale 'test' pour vous, pour laquelle l'amont serait 'remote-tracking branch'origin/test'.
Le * (no branch)
dans git branch
la sortie signifie que vous êtes sur une branche sans nom, dans l'état de "tête détachée" (HEAD points directly to commit, et n'est pas une référence symbolique à une branche locale). Si vous avez fait quelques commits sur cette branche non nommée, vous pouvez toujours créer une branche locale à partir de la commit courante:
git checkout -b test HEAD
dans ce cas, vous voulez probablement créer une branche locale test
qui suit la branche distante test
:
$ git branch test origin/test
dans les versions précédentes de git
, vous aviez besoin d'une option explicite --track
, mais c'est la valeur par défaut maintenant lorsque vous branchez une branche distante.
Accepté de répondre ne fonctionne pas pour vous?
alors que la première et la réponse sélectionnée est techniquement correct , il est possible que vous n'ayez pas encore récupéré tous les objets et les références du dépôt à distance. Si c'est le cas, vous recevrez l'erreur suivante:
$ git checkout -b remote_branch origin/remote_branch
fatal: git checkout: la mise à jour des chemins est incompatible avec la commutation des branches.
Aviez-vous l'intention de vérifier "origin/remote_branch" qui ne peut pas être résolu en tant que commit?
Solution
si vous recevez ce message, vous devez d'abord faire un git fetch origin
où origin
est le nom du dépôt distant avant d'exécuter 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 voir, l'exécution de git fetch origin
récupérait n'importe quelle télécommande branches nous n'étions pas encore mis en place pour suivre sur notre machine locale. De là, puisque nous avons maintenant un ref vers la branche distante, nous pouvons simplement exécuter git checkout remote_branch
et nous allons gagner les avantages du suivi à distance.
j'ai essayé la solution ci-dessus, mais ça n'a pas marché. Essayez ça, ça marche:
git fetch origin 'remote_branch':'local_branch_name'
cela récupérera la branche distante et créera une nouvelle branche locale (si elle n'existe pas déjà) avec le nom local_branch_name
et traquera la branche distante.
Ce sera DWIM pour une distance n'a pas de nom d'origine ( documentation ):
$ git checkout -t remote_name/remote_branch
Pour ajouter une nouvelle télécommande, vous devez faire ce qui suit:
$ git remote add remote_name location_of_remote
$ git fetch remote_name
le premier dit à Git que la télécommande existe, le second obtient les propagations.
utiliser:
git checkout -b <BRANCH-NAME> <REMOTE-NAME>/<BRANCH-NAME>
D'autres réponses ne fonctionnent pas avec le Git moderne dans mon cas Bénin. Vous pourriez avoir besoin de tirer en premier si la branche distante est nouvelle, mais je n'ai pas vérifié cette affaire.
OK , la réponse est facile... Vous voyez la branche, mais vous n'avez pas encore de copie locale!...
vous devez fetch
la succursale...
vous pouvez simplement aller chercher et ensuite vérifier à la branche, utilisez la commande d'une ligne ci-dessous pour le faire:
git fetch && git checkout test
j'ai aussi créé l'image ci-dessous pour vous de partager les différences, regardez comment fetch
fonctionne et aussi comment il est différent de pull
:
Pour cloner un dépôt Git, n':
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 voulez vérifier les autres branches, faire:
git checkout -t origin/future_branch (for example)
cette commande vérifie la branche distante, et le nom de la branche locale sera le même que celui de la branche distante.
si vous souhaitez modifier le nom de votre succursale locale lors de votre départ:
git checkout -t -b enhancement origin/future_branch
maintenant votre nom de branche local est enhancement
, mais votre nom de branche distant est future_branch
.
Vous pouvez 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
tout d'Abord, vous devez faire:
git fetch
# Si vous ne savez pas à propos de la succursale nom
git fetch origin branch_name
Deuxièmement, vous pouvez vérifier la branche distante dans votre local par:
git checkout -b branch_name origin/branch_name
-b
créera une nouvelle branche au nom spécifié à partir de la branche distante que vous avez sélectionnée.
commandes
git fetch --all
git checkout -b <ur_new_local_branch_name> origin/<Remote_Branch_Name>
sont égaux à
git fetch --all
et ensuite
git checkout -b fixes_for_dev origin/development
les deux créeront un latest fixes_for_dev
de development
j'utilise la commande suivante:
git checkout --track origin/other_remote_branch
si la branche est sur autre chose que la télécommande origin
j'aime faire ce qui suit:
$ git fetch
$ git checkout -b second/next upstream/next
ceci va vérifier la branche next
sur la upstream
à distance d'une branche locale appelée second/next
. Ce qui veut dire que si vous avez déjà une branche locale nommée la suivante, elle ne sera pas en conflit.
$ git branch -a
* second/next
remotes/origin/next
remotes/upstream/next
git branch -r
dit que le nom de l'objet n'est pas valide, parce que ce nom de branche n'est pas dans la liste des branches locales de Git. Mettez à jour votre liste de branche locale à partir de l'origine avec:
git remote update
et essayez de vérifier à nouveau votre branche distante.
ça a marché pour moi.
je crois git fetch
tire tous branches distantes, ce qui n'est pas ce que l'affiche originale voulait.
aucune de ces réponses a fonctionné pour moi. cela a fonctionné:
git checkout -b feature/branch remotes/origin/feature/branch
la commande git remote show <origin name>
listera 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
utilisez ces étapes pour récupérer les 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
D'autres gars et filles donnent les solutions, mais peut-être que je peux vous dire pourquoi.
git checkout test 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 appuyez sur la touche Entrée, aucun message n'apparaît et aucune erreur ne se produit. Suis-je le droit?
Si la réponse est "oui", je peux vous dire la cause.
La cause est qu'il y a un fichier (ou dossier) nommé 'test' dans votre arborescence de travail.
quand git checkout xxx
parsed,
- Git regarde
xxx
comme un nom de branche au premier abord, mais il n'est pas une branche nommée test. - puis Git pense que
xxx
est un chemin, et heureusement (ou malheureusement), il y a un fichier nommé test. Ainsi,git checkout xxx
signifie rejeter toute modification dans le fichierxxx
. - S'il n'y a pas de fichier nommé
xxx
non plus, alors Git va essayer de créer lexxx
selon certaines règles. Une des règles est de créer une branche nomméexxx
siremotes/origin/xxx
existe.
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 aussi une version en une seule ligne:
git fetch --all; for branch in `git branch -r --format="%(refname:short)" | sed 's/origin\///'`; do git branch --track "$branch" "origin/$branch" ; done ;
veuillez suivre la commande pour créer un dossier vide. Entrez 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'
pour obtenir des branches nouvellement créées
git fetch
pour passer dans une autre branche
git checkout BranchName
aller chercher l'origine et vérifier la branche.
git fetch origin && git checkout branch_name
lancez Simplement git checkout
avec le nom de la branche distante. Git va créer automatiquement une branche locale qui suit la branche distante:
git fetch
git checkout test
cependant, si ce nom de branche se trouve dans plus d'une télécommande, cela ne fonctionnera pas car Git ne sait pas quoi utiliser. Dans ce cas, vous pouvez utiliser soit:
git checkout --track origin/test
ou
git checkout -b test origin/test
Dans 2.19 , Git appris la configuration checkout.defaultRemote
, qui spécifie une distance par défaut pour résoudre une telle ambiguïté.