it-swarm.it

Come posso controllare un ramo Git remoto?

Qualcuno ha spinto un ramo chiamato testcon git Push Origin test in un repository condiviso. Posso vedere il ramo con git branch -r.

Ora sto provando a controllare il ramo testremoto.

Ho provato:

  • git checkout test che non fa nulla

  • git checkout Origin/test fornisce * (no branch). Che è fonte di confusione Come posso essere su "no branch"?

Come posso controllare un ramo Git remoto?

6088
Juri Glass

Aggiornare

La risposta di Jakub in realtà migliora su questo. Con le versioni Git ≥ 1.6.6, con un solo telecomando, puoi semplicemente:

git fetch
git checkout test

Come utente masukomi sottolinea in un commento, git checkout test NON funzionerà nel git moderno se hai più telecomandi. In questo caso usa

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

o la stenografia

git checkout -t <name of remote>/test

Vecchia risposta

Prima di poter iniziare a lavorare localmente su un ramo remoto, devi recuperarlo come indicato nelle risposte di seguito.

Per recuperare un ramo, devi semplicemente:

git fetch Origin

Questo preleverà tutti i rami remoti per te. Puoi vedere i rami disponibili per il checkout con:

git branch -v -a

Con i rami remoti in mano, ora è necessario controllare la filiale che ti interessa, dandoti una copia di lavoro locale:

git checkout -b test Origin/test
8411
hallski

Sidenote:Con Git moderno (> = 1.6.6 ), puoi usare solo

git checkout test

(nota che è 'test', non 'Origin/test') per eseguire magici DWIM - mery e creare per te un test 'branch' locale, per il quale monte sarebbe il ramo di localizzazione remota 'Origine/test '.


La * (no branch) nell'output git branch significa che si è su un ramo senza nome, nel cosiddetto stato "HEAD distaccato" (HEAD punta direttamente al commit e non è un riferimento simbolico a qualche ramo locale). Se hai fatto qualche commit su questo branch senza nome, puoi sempre creare un branch locale fuori dal commit corrente:

git checkout -b test HEAD
1190
Jakub Narębski

In questo caso, probabilmente vorrai creare un ramo test locale che stia tracciando il ramo test remoto:

$ git branch test Origin/test

Nelle versioni precedenti di git, era necessaria l'opzione --track esplicita, ma questa è l'impostazione predefinita ora quando si dirama un ramo remoto.

528
ndim

Risposta accettata non funziona per te?

Mentre la prima risposta selezionata è tecnicamente correct , c'è la possibilità che tu non abbia ancora recuperato tutti gli oggetti e i ref dal repository remoto. In questo caso, riceverai il seguente errore:

$ git checkout -b remote_branch Origin/remote_branch

fatale: git checkout: i percorsi di aggiornamento non sono compatibili con i rami di commutazione.
Hai intenzione di eseguire il checkout di 'Origin/remote_branch' che non può essere risolto come commit?

Soluzione

Se ricevi questo messaggio, devi prima fare un git fetch Origin dove Origin è il nome del repository remoto prima di eseguire git checkout remote_branch. Ecco un esempio completo di risposte:

$ 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'

Come puoi vedere, l'esecuzione di git fetch Origin ha richiamato eventuali rami remoti che non eravamo ancora stati configurati per tracciare sul nostro computer locale. Da lì, dato che ora abbiamo un riferimento al ramo remoto, possiamo semplicemente eseguire git checkout remote_branch e otterremo i vantaggi del monitoraggio remoto.

439
Corey Ballou

Ho provato la soluzione di cui sopra, ma non ha funzionato. Prova questo, funziona:

git fetch Origin 'remote_branch':'local_branch_name'

Questo preleverà il ramo remoto e creerà un nuovo ramo locale (se non esiste già) con nome local_branch_name e ne tiene traccia in remoto.

226
Sahil kalra

Questo sarà DWIM per un remoto non denominato Origin ( documentation ):

$ git checkout -t remote_name/remote_branch

Per aggiungere un nuovo telecomando, dovrai prima fare quanto segue:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

Il primo dice a Git che il telecomando esiste, il secondo ottiene il commit.

105
tacaswell

Uso:

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

Altre risposte non funzionano con il Git moderno nel mio caso benigno. Potrebbe essere necessario eseguire prima il pull se il ramo remoto è nuovo, ma non l'ho verificato.

100
matanster

OK, la risposta è semplice ... In pratica vedi il ramo, ma non hai ancora una copia locale! ...

Hai bisogno di fetch il ramo ...

Puoi semplicemente recuperare e quindi effettuare il checkout al ramo, utilizzare il comando di una riga qui sotto per farlo:

git fetch && git checkout test

Ho anche creato l'immagine qui sotto per condividere le differenze, vedere come funziona fetch e anche come è diverso da pull:

 git fetch

78
Alireza

Per clonare un repository Git, fare:

git clone <either ssh url /http url>

Il comando precedente controlla tutti i rami, ma verrà inizializzato solo il ramo master. Se vuoi controllare gli altri rami, fai:

git checkout -t Origin/future_branch (for example)

Questo comando controlla il ramo remoto e il nome del ramo locale sarà lo stesso del ramo remoto.

Se desideri sovrascrivere il nome del tuo ramo locale al momento del checkout:

git checkout -t -b enhancement Origin/future_branch

Ora il nome del ramo locale è enhancement, ma il nome del ramo remoto è future_branch.

Documentazione

52
Madhan Ayyasamy

Puoi provare

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

o

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

Innanzitutto, devi fare:

git fetch # Se non si conosce il nome del ramo

git fetch Origin branch_name

In secondo luogo, puoi controllare il ramo remoto nel tuo locale:

git checkout -b branch_name Origin/branch_name

-b creerà un nuovo ramo nel nome specificato dal ramo remoto selezionato.

28
Silent Spectator

Comandi

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

sono uguali a

 git fetch --all

e poi

 git checkout -b fixes_for_dev Origin/development

Entrambi creeranno un latest fixes_for_dev da development

27
sreekumar

Io uso il seguente comando:

git checkout --track Origin/other_remote_branch
25
priyankvex

Se il ramo è su qualcosa di diverso dal remoto Origin mi piace fare quanto segue:

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

Verificherà il ramo next sul upstream remoto in un ramo locale chiamato second/next. Il che significa che se hai già una succursale locale chiamata accanto, non entrerà in conflitto.

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

git branch -r dice che il nome dell'oggetto non è valido, perché quel nome di ramo non si trova nell'elenco dei rami locali di Git. Aggiorna il tuo elenco di filiali locali da Origin con:

git remote update

E poi prova a controllare di nuovo il tuo ramo remoto.

Questo ha funzionato per me.

Credo che git fetch entri in all remote branch, che non è quello che voleva il poster originale.

16
webdevguy

nessuna di queste risposte ha funzionato per me. questo ha funzionato:

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

15
brianyang

git fetch && git checkout your-branch-name

15

Basta eseguire git checkout con il nome del ramo remoto. Git creerà crea automaticamente una diramazione locale che tiene traccia di quella remota:

git fetch
git checkout test

Tuttavia, se il nome di questo ramo si trova in più di un telecomando, questo non funzionerà poiché Git non sa quale usare. In tal caso puoi utilizzare entrambi:

git checkout --track Origin/test

o

git checkout -b test Origin/test

In 2.19 , Git ha appreso il parametro checkout.defaultRemote , che specifica un telecomando di default su quando risolvere una tale ambiguità.

13
Eugene Yarmash

Ero bloccato in una situazione che vedeva error: pathspec 'desired-branch' did not match any file(s) known to git. per tutti i suggerimenti sopra riportati. Sono in git versione 1.8.3.1.

Quindi questo ha funzionato per me :

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

La spiegazione è che ho notato che durante il recupero del ramo remoto, è stato recuperato su FETCH_HEAD:

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

Il comando git remote show <Origin name> elencherà tutti i rami (compresi i rami non tracciati). Quindi puoi trovare il nome del ramo remoto che devi recuperare.

Esempio:

$ git remote show Origin

Utilizzare questi passaggi per recuperare i rami remoti:

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)

Esempio:

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

Altri ragazzi e ragazze danno le soluzioni, ma forse posso dirti perché.

test di verifica del git che non fa nulla

Does nothing non è uguale a doesn't work, quindi suppongo che quando digiti 'git checkout test' nel tuo terminale e premi il tasto invio, non compaia nessun messaggio e non si verifichi alcun errore. Ho ragione?

Se la risposta è "sì", posso dirvi la causa.

La causa è che nel tuo albero di lavoro c'è un file (o una cartella) chiamato 'test'.

Quando git checkout xxx è stato analizzato,

  1. Git considera xxx come nome di un ramo all'inizio, ma non esiste alcun ramo chiamato test.
  2. Quindi Git crede che xxx sia un percorso e, fortunatamente (o sfortunatamente), c'è un file chiamato test. Quindi git checkout xxx significa eliminare qualsiasi modifica nel file xxx.
  3. Se non c'è neanche un file chiamato xxx, allora Git proverà a creare il xxx secondo alcune regole. Una delle regole è creare un ramo chiamato xxx se remotes/Origin/xxx esiste.
8
oldman

Per ottenere rami appena creati

git fetch

Per passare a un altro ramo

git checkout BranchName
7
Hasib Kamal

Puoi iniziare a monitorare tutte le filiali remote con il seguente script Bash:

#!/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

Ecco anche una versione a linea singola:

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

Recupera dal telecomando e controlla il ramo.

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

Per esempio.:

git fetch Origin && git checkout feature/XYZ-1234-Aggiungi-avvisi

6
Pranav

Se il nome del ramo remoto inizia con caratteri speciali, devi usare le virgolette attorno ad esso nel comando checkout, altrimenti git non saprà di quale ramo stai parlando.

Ad esempio, ho provato a eseguire il checkout di un ramo remoto denominato #9773 ma il comando non ha funzionato correttamente, come mostrato nella figura seguente:

 enter image description here

Per qualche motivo mi sono chiesto se il simbolo nitido (#) potesse avere qualcosa a che fare con esso, e poi ho provato a racchiudere il nome del ramo con virgolette singole, come '#9773' rathen piuttosto che #9773, e ha funzionato bene.

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

Si prega di seguire il comando per creare una cartella vuota. Inseriscilo e usa questo comando:

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