2011-09-27 9 views
27

Sto provando a creare un ramo da un tag remoto, ma sembra che non ci sia modo di farlo. Quando provoCome fare un "git checkout -b <branchname>" da un tag remoto

git checkout -b test origin/deploy 

cui origine è il telecomando e distribuire è il tag che voglio check-out, ma ho

fatal: git checkout: updating paths is incompatible with switching branches. 
Did you intend to checkout 'origin/deploy' which can not be resolved as commit? 

UPDATE: Ho appena scoperto che

git fetch --all -t 

non funzionava correttamente per me. Mentre scarica tutti i rami, non scarica tutti i tag, quindi quando ho estratto distribuivo era e tag vecchio. Ora eseguo

git fetch --all && git fetch -t 

In questo modo quando creo un nuovo ramo sulla base di un tag

git checkout -b test deploy 

la nuova filiale è aggiornato con l'ultimo deploy.

risposta

21

io non sono un guru git, ma avevo usato qualcosa di simile prima e mi sembrava di aver lavorato bene:

git pull (or fetch, just need to make sure you are updated) 
git checkout -b test remotes/origin/deploy 
+0

questo non funziona per me (MacOs X, il telecomando è ospitato su github) Ottengo: fatale: impossibile aggiornare i percorsi e passare al ramo '6.2.3-ga4' allo stesso tempo –

+1

Assicurarsi che il ramo che si sta tentando di tracciare esista, ad esempio prima eseguire un recupero git, o git pull o git update remoto, ecc. –

29

Non sono sicuro di poterlo fare direttamente. Probabilmente stai bloccato con fare un prendere e poi un checkout:

git fetch origin 
git checkout -b test tag-name 

A proposito, non mi consiglia di utilizzare un nome di tag come "distribuire".

+0

Bene, ora io' m sempre facendo "git fetch --all -t" prima del checkout, ma in alcuni casi i rami creati dal tag sembrano puntare a una vecchia distribuzione anziché l'ultima. BTW, perché non dovresti usare il nome "deploy"? – Sergi

+1

@Sergi, i tag sono destinati a rimanere fissi, ma un nome come "deploy" implica che lo cambierai frequentemente. È meglio utilizzare un ramo per etichettare una linea di sviluppo che cambia nel tempo e fare in modo che i tag siano versioni specifiche, come "1.0". –

+0

@Joost, oh, non ti preoccupare allora. Creo sempre due tag quando eseguo la distribuzione, uno con il nome della versione e un altro chiamato deploy, che viene sovrascritto ogni volta che eseguo una nuova distribuzione. In questo modo il resto degli sviluppatori potrebbe diramarsi dall'ultimo punto buono sul ramo di distribuzione. Qualche idea per quale motivo a volte ricevo filiali che puntano a vecchie distribuzioni? Potrebbe essere che "git fetch --all -t" non funzioni come previsto? – Sergi

4

è necessario eseguire

git pull 
git checkout -b <new-branch-name> remotes/origin/<source-branch-name> 
Problemi correlati