qualcuno ha inviato un ramo chiamato test
con git push origin test
a un repository condiviso. posso vedere il ramo con git branch -r
.
ora sto cercando di controllare il ramo remoto test
.
ho provato:
git checkout test
che non fa nullagit checkout origin/test
dà* (no branch)
. che è fonte di confusione. come posso essere su "nessun ramo"?
come faccio a controllare un ramo Git remoto?
En title : How do I check out a remote Git branch?
aggiornamento aggiornamento aggiornamento aggiornamento
la risposta di Jakub in realtà migliora su questo. con Git versions & ge; 1.6.6, con un solo telecomando, puoi semplicemente fare:
come utente masukomi sottolinea in un commento,
git checkout test
NON funzionerà con git moderno se hai telecomandi multipli. in questo caso l'usoo la stenografia
vecchia risposta
prima di poter iniziare a lavorare localmente su un ramo remoto, devi prenderlo come indicato nelle risposte qui sotto.
per recuperare un ramo, devi semplicemente:
questo porterà tutti i rami remoti per voi. puoi vedere i rami disponibili per il checkout con:
con i rami remoti in mano, è ora necessario controllare il ramo che ti interessa, dandovi una copia locale di lavoro:
git fetch
prima di farlo in modo che git sia a conoscenza diorigin/test
git fetch origin test
origin/test
che non può essere risolto come commit? "git fetch --all
git remote update
primagit checkout -b test origin/test
git checkout test
NON funzionerà in git moderno se hai telecomandi multipli" -- ho un singolo telecomando e devo ancora faregit checkout -b test origin/test
...git pull
git checkout test
non funzionava per me né con telecomandi multipli ma solo con un ramo con il nometest
... ma alla fine ho capito che il mio problema era che avevo una cartella chiamatatest
. quindi git stava semplicemente controllando quella cartella. così ho ancora bisogno di faregit checkout -b test origin/test
git fetch origin
? grazie:)in questo caso, probabilmente si desidera creare un ramo locale
test
che segue il ramo remototest
:nelle versioni precedenti di
git
, si aveva bisogno di un'opzione esplicita--track
, ma questo è il default ora quando si sta diramando un ramo remoto.git branch test
funziona per mesidenote: con Git moderno (> = 1.6.6), puoi usare solo
(notate che è 'test' non 'origin / test') eseguire il magico DWIM -mery e creare il branch locale 'test' per voi, per il quale upstream sarebbe 'origin / test' del branch di tracciamento remoto.
l'output
* (no branch)
ingit branch
significa che sei su un ramo senza nome, nello stato chiamato "separato HEAD" (HEAD punta direttamente al commit, e non è un riferimento simbolico ad un ramo locale). se hai fatto alcune commit su questo ramo senza nome, puoi sempre creare un ramo locale fuori dalla commit corrente:git checkout test
è più DWIM-my. non solo aggiunge l'opzione--track
, ma quando si verifica un ramo inesistente nota che esiste un ramo di tracciamento remoto dello stesso nome e crea automaticamente un ramo locale per te che puoi fare il checkout (non puoi fare il checkout del ramo di tracciamento remoto, in quanto è controllato dal repository remoto esterno). HTH HTHgit checkout mybranch
porta a git che mi suggerisce di usaregit pull
perché mybranch esisteva già. grazie per avermi guidato verso la soluzione!git checkout test
non ha funzionato per me. ha dovuto cadere di nuovo alla risposta accettata. probabilmente ho qualche strano config che interferisce da qualche parte.origin
error: pathspec 'branch_name' did not match any file(s) known to git.
allora dovresti fare prima git fetch..git/config
e verificare che le specifiche di riferimento per il recupero dal telecomando (ad esempio origine) non solo recupera da un ramo specifico. per esempio, questo è cattivo:fetch = +refs/heads/master:refs/remotes/origin/master
perché recupera solo master. dovrebbe apparire comefetch = +refs/heads/*:refs/remotes/origin/*
. quindi utilizzaregit fetch origin
dopo. se hai successo, il ramo che ti interessa dovrebbe apparire nell'output fetch, e dovrebbe anche apparire nell'output digit branch -a
come ramo remoto.git checkout <non-branch>
, per esempiogit checkout origin/test
produce un ramo separato HEAD / unnamed, mentregit checkout test
ogit checkout -b test origin/test
produce un ramo localetest
(con ramo di tracciamento remotoorigin/test
come upstream)git checkout -B origin/branch
si crea e checkout il ramo remoto desiderato in una riga. dove l'opzione-b
crea solo il ramo e posiziona HEAD in stato staccato.questo comando esegue DWIM per una origine remota non chiamata (documentazione):
per aggiungere un nuovo telecomando, è necessario fare il seguente primo:
il primo dice a Git che il telecomando esiste, il secondo riceve i commit.
risposta accettata non funziona per voi?
mentre la prima e selezionata risposta è tecnicamente corretta, c'è la possibilità che non hai ancora recuperato tutti gli oggetti e refs dal repository remoto. se questo è il caso, riceverai il seguente errore:
soluzione soluzione soluzione soluzione
se ricevi questo messaggio, devi prima fare un
git fetch origin
doveorigin
è il nome del repository remoto prima di eseguiregit checkout remote_branch
. ecco un esempio completo con le risposte:come si può vedere, in esecuzione
git fetch origin
recuperato eventuali rami remoti non eravamo ancora la configurazione per tenere traccia sulla nostra macchina locale. da lì, dal momento che ora abbiamo un riferimento al ramo remoto, possiamo semplicemente eseguiregit checkout remote_branch
e avremo i vantaggi di monitoraggio remoto.git checkout -b newbranch
funziona benissimo anche per creare e controllare un nuovo ramo basato sul ramo corrente.git ls-remote
e l'unico modo per usarli ègit checkout -b [branch] --track [remote/branch]
... e questo è dopo chegit pull [remote] [branch]
ha funzionato. cioè, in realtà ha tirato l'intero ramo, ma ancora non la lista.git fetch other_remote only_branch
, si ottiene ancora l'errorefatal
. devigit fetch other_remote
senza il nome del ramo. design strano.per clonare un repository Git, fare:
il comando precedente controlla tutti i rami, ma solo il ramo
master
sarà inizializzato. se vuoi controllare gli altri rami, fai:questo comando controlla il ramo remoto, e il nome del ramo locale sarà lo stesso del ramo remoto.
se vuoi sovrascrivere il tuo nome locale al checkout:
ora il nome del ramo locale è
enhancement
, ma il nome del ramo remoto èfuture_branch
.documentazione documentazione documentazione documentazione documentazione
master
, questo non funzionerà.se il ramo è su qualcosa di diverso dal telecomando
origin
mi piace fare quanto segue:questo farà il checkout del ramo
next
sulupstream
remoto in un ramo locale chiamatosecond/next
. il che significa che se hai già un ramo locale chiamato poi non sarà in conflitto.git branch -r
dice che il nome dell'oggetto non è valido, perché quel nome del ramo non è nella lista dei branch locali di Git. aggiorna la tua lista locale di origine con:e poi provare a controllare il ramo remoto di nuovo.
questo ha funzionato per me.
credo che
git fetch
tira in tutti i rami remoti, che non è quello che il poster originale voleva.git remote update
anche recuperare tutti i rami remoti.ho provato la soluzione di cui sopra, ma non ha funzionato. prova questo, funziona:
questo recupera il ramo remoto e crea un nuovo ramo locale (se non esiste già) con nome
local_branch_name
e traccia quello remoto in esso.git version 2.15.1
git clone --single-branch
si può provare
o o o o o
--track
non è più necessario nelle versioni più recenti di git, perché è impostato di default, come spiegato in questa risposta precedente.git fetch && git checkout your-branch-name
seguire il comando per creare una cartella vuota. inserisci questo comando e usa questo comando:
uso: uso:
altre risposte non funzionano con Git moderno nel mio caso benigno. potrebbe essere necessario tirare prima se il ramo remoto è nuovo, ma non ho controllato quel caso.
comandi comandi comandi comandi comandi
sono uguali a
e poi e poi
entrambi creeranno un
latest fixes_for_dev
dadevelopment
upstream
, non soloorigin
, e ogni risposta raccomandata non fa nulla di lontanamente utile (pun-intended). Edit - mi scusi, la moltitudine di suggerimenti contenuti nella top 2 risposte erano inutili; 3rd uno (git branch test origin/test
) è ciò che funziona. sono contento che i primi 2 hanno 20x il numero di voti...in primo luogo, dovete fare:
git fetch
# Se non si conosce il nome del ramoin secondo luogo, è possibile controllare ramo remoto nel tuo locale da:
-b
creerà un nuovo ramo nel nome specificato dal ramo remoto selezionato.altri ragazzi e ragazze danno le soluzioni, ma forse posso dirvi perché.
Does nothing
non è ugualedoesn't work
, quindi immagino che quando digiti 'git checkout test' nel tuo terminale e premi Invio, non appare nessun messaggio e non si verifica alcun errore. ho ragione?se la risposta è 'sì', posso dirvi la causa.
la causa è che c'è un file (o una cartella) chiamato 'test' nella tua struttura di lavoro.
quando
git checkout xxx
analizzato,xxx
come un nome di ramo, ma non c'è nessun ramo chiamato test.xxx
sia un percorso, e fortunatamente (o sfortunatamente), c'è un file chiamato test. quindigit checkout xxx
significa scartare qualsiasi modifica nel filexxx
.xxx
, allora Git proverà a creare ilxxx
secondo alcune regole. una delle regole è creare un ramo chiamatoxxx
seremotes/origin/xxx
esiste.1) git fetch origin2) git checkout -b origin /
puoi iniziare a tracciare tutti i rami remoti con il seguente script Bash:
ecco anche una versione single-line:
OK, la risposta è facile... Hai visto il ramo, ma non hai ancora una copia locale!...
è necessario
fetch
il ramo...si può semplicemente recuperare e poi fare il checkout al ramo, usare il comando a una riga qui sotto per farlo:
ho anche creato l'immagine qui sotto per condividere le differenze, guardare come funziona
fetch
e anche come è diverso dapull
:test
test
sembra un nuovo ramo, quindi non è probabile che sia presente localmente. altrimenti si potrebbe tirare più facile con singologit pull
comando.fetch
senzapull
lasciare modifiche nella copia recuperata, ma non nel ramo locale, portando al ramo locale non essere up-to-date?uso il seguente comando:
il comando
git remote show <origin name>
elenca tutti i rami (compresi quelli non tracciati). poi puoi trovare il nome del ramo remoto che devi prendere.esempio: esempio:
utilizzare questi passaggi per recuperare i rami remoti:
esempio: esempio:
$ git clone -b release --single-branch --depth 5 https://github.com/user/repo.git
Wron 't information$ git remote show origin
questo non elenca tutti i branch remoti con repository clonati da un singolo branch.per ottenere nuovi rami creati
per passare in un altro ramo
prendi dal telecomando e verifica il ramo.
ad es. per esempio ::::
nessuna di queste risposte ha funzionato per me. questo ha funzionato:
git checkout -b feature/branch remotes/origin/feature/branch
git
quando chiamo il comandogit branch -a
, ma non ero sicuro, così ho usatogit checkout -b apps/FEATURE/branch origin/apps/FEATURE/branch
e sembrava funzionare. messaggio:Branch 'apps/FEATURE/branch' set up to track remote branch 'apps/FEATURE/epicBranch' from 'origin'. Switched to a new branch 'apps/FEATURE/branch'
basta eseguire
git checkout
con il nome del ramo remoto. Git creerà automaticamente un ramo locale che traccia quello remoto:comunque, se quel nome di ramo è trovato in più di un remoto, questo non funzionerà poichè Git non sa quale usare. in questo caso è possibile utilizzare sia:
o o o o o
nella 2.19, Git ha imparato la configurazione
checkout.defaultRemote
, che specifica un telecomando per default quando si risolve una tale ambiguità.ero bloccato in una situazione vedere
error: pathspec 'desired-branch' did not match any file(s) known to git.
per tutti i suggerimenti di cui sopra. sono su git versione 1.8.3.1.così questo ha funzionato per me:
la spiegazione dietro è che ho notato che quando si recupera il ramo remoto, è stato recuperato in FETCH _ HEAD:
git checkout --track origin/test
se il nome del ramo remoto inizia con caratteri speciali devi usare virgolette singole nel comando checkout, altrimenti git non saprà di quale ramo stai parlando.
per esempio, ho provato a fare il checkout di un ramo remoto chiamato
#9773
ma il comando non funzionava correttamente, come mostrato nella foto qui sotto:per qualche ragione mi sono chiesto se il simbolo tagliente (#) potesse avere qualcosa a che fare con esso, e poi ho provato a circondare il nome del ramo con virgolette singole, come
'#9773'
Rathen che solo#9773
, e ha funzionato bene.#
viene usato per i commenti, quindi qualsiasi cosa dopo il#
verrà ignorata. questa è una cosa di shell e non qualcosa di specifico per git. usare le virgolette di un backslash prima del#
dovrebbe essere sufficiente.git checkout -b <new-branch> <existing-branch>
.utilizzare
fetch
per tirare tutto il telecomandoper elencare tutti i tuoi rami
per controllare / cambiare un ramo