Git: unire un ramo remoto localmente


204

Ho rimosso tutti i rami remoti git fetch --all. Vedo il ramo che vorrei unire tramite git branch -acome telecomandi / origine / nome ramo. Il problema è che non è accessibile. Non riesco a unire o effettuare il checkout?

Risposte:


321

Puoi fare riferimento a quei rami di localizzazione remoti ~ (elencati con git branch -r) con il nome del loro telecomando.

Devi recuperare il ramo remoto:

git fetch origin aRemoteBranch

Se desideri unire una di quelle filiali remote nella tua filiale locale:

git checkout master
git merge origin/aRemoteBranch

Nota 1: per un repository di grandi dimensioni con una lunga cronologia, si desidera aggiungere l' --depth=1opzione quando si utilizza git fetch.

Nota 2: questi comandi funzionano anche con altri repository remoti in modo da poter impostare an origine an upstreamse si sta lavorando su un fork.


Scenario opposto: se si desidera unire uno dei rami locali su un ramo remoto (anziché un ramo remoto con uno locale, come mostrato sopra), è necessario creare prima un nuovo ramo locale sopra detto ramo remoto:

git checkout -b myBranch origin/aBranch
git merge anotherLocalBranch

L'idea qui è quella di unire "una delle tue filiali locali" (qui anotherLocalBranch) in una filiale remota ( origin/aBranch).
Per questo, devi creare prima " myBranch" come rappresentante quel ramo remoto: questa è la git checkout -b myBranch origin/aBranchparte.
E quindi puoi unirti anotherLocalBranchad esso (a myBranch).


aLocalBranch? è un errore di battitura? Immagino volessi scrivere di nuovo "myBranch"?
Knocte,

1
@knocte No: "Se vuoi unire una delle tue filiali locali in una di quelle filiali remote": sto unendo " aLocalBranch" a " myBranch", con " myBranch" che rappresenta una filiale remota origin/aBranch.
VonC

Mi dispiace disturbarti @VonC, nel tuo commento precedente dici che aLocalBranchnon è un errore di battitura, ma hai approvato l'ultima modifica (2 anni dopo!) Che corregge questo "probabile errore di battitura". Volevo verificare con te prima di annullare la modifica.
rath

1
@rath Hai ragione: sembra che avrei potuto rivedere quella modifica un po 'in fretta, al limite della disattenzione. Ho modificato la risposta per chiarire il secondo caso di unione: puoi dirmi se ora è più chiaro?
VonC

91

Ogni volta che faccio un'unione, entro nel ramo in cui voglio unirmi (ad es. " git checkout branch-i-am-working-in") E quindi faccio quanto segue:

git merge origin/branch-i-want-to-merge-from


2
Immagino che tu debba fare un git fetch origin/branch-i-want-to-merge-fromprimo, giusto?
Hinrich,

9
git fetch origin developseguito dagit merge origin/develop
Olivier il

2
@Olivier Hai ragione, questo è il modo giusto di farlo. git merge da solo non lo farà.
Sam,

1
grazie per la convenzione di nomina intelligente che mi ha aiutato a capire
tony2tones

1
@Akira non è git add .-> git commit -m <message>-> git push -u origin <branch>?
Cloud Cho

24

Recupera prima il ramo remoto dall'origine.

git fetch origin remote_branch_name

Unire il ramo remoto al ramo locale

git merge origin/remote_branch_name

1
Questo ha funzionato per me quando la risposta accettata non ha segnalato qualcosa che possiamo unire. Nel mio caso mi stavo fondendo dal fork di un altro utente del mio repository su GitHub.
SJT

È richiesto il primo comando di recupero? 'Git merge origin / remote_branch_name' legge dal ramo remoto, non locale. Quindi non mi dovrebbe importare, la filiale locale è aggiornata o no?
Michael Freidgeim,

20

Forse vuoi tracciare il ramo remoto con un ramo locale:

  1. Crea una nuova filiale locale: git branch new-local-branch
  2. Imposta questo ramo appena creato per tenere traccia del ramo remoto: git branch --set-upstream-to=origin/remote-branch new-local-branch
  3. Entra in questo ramo: git checkout new-local-branch
  4. Tirare tutto il contenuto del ramo remoto nel ramo locale: git pull

3

Se hai già recuperato il tuo ramo remoto e lo fai git branch -a,
ottieni qualcosa del tipo:

* 8.0
  xxx
  remotes/origin/xxx
  remotes/origin/8.0
  remotes/origin/HEAD -> origin/8.0
  remotes/rep_mirror/8.0

Successivamente, è possibile utilizzare rep_mirror/8.0per designare localmente la filiale remota.

Il trucco è che remotes/rep_mirror/8.0non funziona ma rep_mirror/8.0funziona.

Quindi, un comando come git merge -m "my msg" rep_mirror/8.0fare l'unione.

(nota: questo è un commento alla risposta @VonC. L'ho inserito come un'altra risposta perché i blocchi di codice non si adattano al formato del commento)

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.