Tieni traccia di un nuovo ramo remoto creato su GitHub


183

Ho già un ramo master locale che segue il ramo master remoto di un progetto github. Ora, un mio collaboratore ha creato una nuova filiale nello stesso progetto e voglio fare di conseguenza quanto segue:

  1. creare una nuova filiale localmente
  2. rendere questo nuovo ramo traccia il nuovo ramo remoto appena creato.

Come dovrei farlo correttamente?


2
git checkout --track -b <branch locale> <remote> / <branch tracked> funziona anche.
MLister,

14
... o solo git checkout -t <remote>/<whatever>. Se c'è solo un ramo di tracciamento remoto che termina in <whatever>te, puoi anche solo fare git checkout <whatever>e indovinare cosa intendi.
Mark Longair,

Risposte:


251
git fetch
git branch --track branch-name origin/branch-name

Il primo comando assicura che si disponga di un ramo remoto nel repository locale. Il secondo comando crea un ramo locale che tiene traccia del ramo remoto. Presuppone che sia il tuo nome remotoorigin e il nome del ramo sia branch-name.

--track L'opzione è abilitata per impostazione predefinita per le filiali remote e puoi ometterla.


3
Quando lo faccio, ricevo un avviso: refname 'branch-name' è ambiguo.
Ultrasaurus

19
Se esiste un solo ramo remoto con quel nome di ramo, puoi semplicemente farlo git checkout <branchname>e git lo verificherà automaticamente e configurerà un ramo di tracciamento. Volevo solo ripetere ciò che @Mark Longair ha detto sopra in questo commento: stackoverflow.com/questions/11262703/… .
Ryan Walls,

Il nome del mio ramo remoto è remotes/origin/develop? Non dovrebbe essere giusto origin/develop? Sono uguali?
ア レ ッ ク ス

2
Ho dovuto farlo git fetch --all, altrimenti i nuovi rami non sarebbero stati recuperati
mschrimpf,

Come fare questo in Eclipse? Quando ho finito con quelli cmd, l'eclissi rileva il nuovo ramo?
Deckard,

31

Se non hai una filiale locale esistente, è davvero semplice come:

git fetch
git checkout <remote-branch-name>

Ad esempio, se recuperi e viene chiamato un nuovo ramo di tracciamento remoto origin/feature/Main_Page, procedi nel seguente modo:

git checkout feature/Main_Page

Ciò crea un ramo locale con lo stesso nome del ramo remoto, monitorando quel ramo remoto. Se hai più telecomandi con lo stesso nome di filiale, puoi usare il meno ambiguo:

git checkout -t <remote>/<remote-branch-name>

Se hai già creato il ramo locale e non vuoi eliminarlo, vedi Come si fa a tracciare un ramo remoto in un ramo Git esistente? .


1
git checkout 1.5-branch( remotes/upstream/1.5-branchè nell'output di git branch -a) comporta la error: pathspec '1.5-branch' did not match any file(s) known to git.modifica di questa git checkout upstream/1.5-branchimpostazione in HEAD distaccato e non viene creato alcun ramo locale. Penso che questa parte della risposta sia semplicemente sbagliata. Questo è con git 2.4.3
Piotr Dobrogost,

Il primo comando funziona per me in git 1.9.3, anche per telecomandi diversi. È possibile che questo comportamento sia cambiato. Il risultato del tuo secondo comando è quello che mi aspetto. Senza -t, non stai specificando che non vuoi fare altro che guardare quella versione specifica sul telecomando.
kotoole,

1
Concordo con @PiotrDobrogost, credo che la tua affermazione "Questo crea un ramo locale con lo stesso nome ..." è errata. Ciò che farà il recupero (quando viene chiamato in questo modo) è creare un ramo di tracciamento remoto per ciascun ramo sul telecomando. Ciò significa che un ramo nel repository locale denominato <remote>/<branch>. Un ramo di tracciamento remoto è di sola lettura, indicando dove si trovava quel ramo sul telecomando all'ultimo recupero. Richiamare checkoutquel riferimento di filiale ti mette in modalità HEAD distaccata, proprio come dice Piotr. Si noti che la specifica del ramo remoto da recuperare evita la creazione di rami di tracciamento remoto indesiderati.
Fanny

2
Per essere chiari ancora una volta: sto suggerendo di usare il comando git checkout feature-branch. NON sto suggerendo di usare il comando git checkout origin/feature-branch che, come entrambi avete sottolineato, si tradurrà in una testa distaccata inutile.
kotoole,

molto più semplice e al punto. Funziona bene con git 2.8.3 su cygwin.
Felipe Alvarez,

29

Prima di tutto devi recuperare il repository remoto:

git fetch remoteName

Quindi puoi creare il nuovo ramo e impostarlo per tenere traccia del ramo remoto che desideri:

git checkout -b newLocalBranch remoteName/remoteBranch

Puoi anche usare "git branch --track" invece di "git checkout -b" come massimo specificato.

git branch --track newLocalBranch remoteName/remoteBranch

Se si checkout -butilizza un ramo remoto come punto di partenza, non è quindi necessario utilizzarlo --track.

5
Inoltre, come sottolineato in questo commento , se lo fai git checkout <branchname>, e c'è un ramo remoto con lo stesso nome (dopo aver fatto un git fetch), il ramo locale verrà automaticamente impostato per tenere traccia di quello remoto.

9

Quando il ramo non è un ramo remoto, è possibile inviare il ramo locale direttamente al telecomando.

git checkout master
git push origin master

o quando hai un ramo di sviluppo

git checkout dev
git push origin dev

o quando esiste il ramo remoto

git branch dev -t origin/dev

Ci sono alcune altre possibilità per spingere un ramo remoto.


Quindi prendi la terza opzione. Quando esiste il ramo remoto puoi creare un ramo locale e tenere traccia del ramo remoto :) è lo stesso della versione da max ma più breve.
René Höhle,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.