Git: non è possibile vedere il nuovo ramo remoto


116

Un collega ha spinto un nuovo ramo remoto a origin / dev / homepage e non riesco a vederlo quando eseguo:

$ git branch -r

Vedo ancora rami remoti preesistenti.

Presumo che ciò sia dovuto al fatto che i miei ref remoti locali non sono aggiornati, quindi quando ho eseguito un git pull non è successo nulla poiché git pull tira solo sul ramo di lavoro corrente corretto? A differenza di git push che spinge tutti i rami che hanno modifiche al ramo remoto corrispondente?


Un problema correlato - Impossibile vedere la filiale remota
RBT

1
riuscito a dimenticare git pull, grazie
JelenaČuklina

1
Nel mio caso ha git fetch <name-of-remote>fatto il trucco. Senza il nome del telecomando, NON ha funzionato.
Menno Deij - van Rijswijk

Risposte:


164

Innanzitutto, controlla che il ramo sia stato effettivamente inviato da remoto, utilizzando il comando git ls-remote origin. Se il nuovo ramo appare nell'output, prova a dare il comando git fetch: dovrebbe scaricare i riferimenti del ramo dal repository remoto.

Se il tuo ramo remoto continua a non apparire, ricontrolla ( ls-remotenell'output) qual è il nome del ramo sul telecomando e, in particolare, se inizia con refs/heads/. Questo perché, per impostazione predefinita, il valore di remote.<name>.fetchè:

+refs/heads/*:refs/remotes/origin/*

in modo che solo i riferimenti remoti il ​​cui nome inizia con refs/heads/verranno mappati localmente come riferimenti di tracciamento remoto sotto refs/remotes/origin/(cioè, diventeranno rami di tracciamento remoto)


4
Sono stato in grado di vedere il nuovo ramo remoto dopo aver eseguito un git fetch origin, ma non sono sicuro di quale sia la differenza se ho appena eseguito un git fetch? Ho letto dell'aggiornamento remoto di git, ma non era chiaro cosa avrebbe fatto. Avrei bisogno di eseguire git fetch per qualsiasi nuovo ramo remoto da qui in avanti?
ibrido

1
@ hybrid9 Se usi git fetch, git scaricherà i riferimenti dal repository remoto predefinito che è stato specificato in .git/config: di solito verrà chiamato origin, quindi entrambi i comandi sono equivalenti, ma la tua configurazione specifica potrebbe essere diversa per qualche motivo. No, non è necessario fornire git fetchper ogni ramo, poiché (per impostazione predefinita) recupera tutti i rami.
Marco Leogrande

1
@ hybrid9 git pullè equivalente a git fetch+ git merge(o git rebasese hai modificato i valori predefiniti), quindi puoi continuare a usarlo git pullcome al solito e i nuovi rami remoti appariranno da soli.
Marco Leogrande

1
Inizialmente ho eseguito git pull ma non ho mai visto quel nuovo ramo remoto che mi ha davvero confuso. Solo fino a quando non ho eseguito git fetch origin. Apprezzo il tempo nel rispondere alle mie domande.
ibrido

2
@ ibrido Ho lo stesso problema. git ls-remote gerritrepo:projectmostra il nuovo ramo remoto ma git branch -anon ... devo fare un altro clone e solo allora apparirà il nuovo ramo
Vikram

79

Controlla se .git/configcontiene

[remote "origin"]
    url = …
    fetch = +refs/heads/master:refs/remotes/origin/master

Se è così, cambialo in dire

[remote "origin"]
    url = …
    fetch = +refs/heads/*:refs/remotes/origin/*

Quindi dovresti essere in grado di usarlo:

$ git fetch
remote: Counting objects: …
remote: Compressing objects: ..
Unpacking objects: …
remote: …
From …
 * [new branch]            branchname -> origin/branchname
$ git checkout branchname
Branch branchname set up to track remote branch branchname from origin.
Switched to a new branch 'branchname'

12
Questo è successo a me dopo un primo clone superficiale.
ArkTekniK

Perfetto!!! Molte grazie! A me è successo durante l'installazione di un tap Homebrew personalizzato con il comando brew tap user/repo: la copia locale del repo clonato da brewaveva le impostazioni che hai menzionato e non era possibile vedere e utilizzare gli altri rami che avevo nel mio repository. Grazie ancora! :) +1!
rmbianchi

3
Il seguente comando può essere utilizzato al posto della modifica manuale del file .git / config . git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"e quindi git fetch originper ottenere tutti i rami sull'origine .
dotnetCarpenter

questo è carino!
madz

47

La risposta più semplice è:

git fetch origin <branch_name>


2
Questa è stata letteralmente l'UNICA cosa che ha funzionato per me.
Theodore R. Smith

3
Non funziona per me. Ottengo questo errore:fatal: Couldn't find remote ref <branch_name>
Parisa Khateri

3
sì, ha funzionato anche per me, dopo che questo checkout di git ha funzionato bene !!
whoami

30

Eseguire un aggiornamento remoto di git anche l'elenco dei rami disponibili dal repository remoto.

Se stai usando TortoiseGit, a partire dalla versione 1.8.3.0, puoi fare "Git -> Sync" e ci sarà un pulsante "Aggiornamento remoto" in basso a sinistra della finestra che appare. Fare clic su quello. Quindi dovresti essere in grado di fare "Git -> Cambia / Acquista" e fare apparire il nuovo ramo remoto nel menu a discesa dei rami che puoi selezionare.


18
git remote updateè un vecchio modo per farlo, il nuovo comando preferito è git fetch.

Nella mia versione di TortoiseGit (2.8.0.0) il pulsante in basso a sinistra ha più opzioni sotto la freccia e ricorda ciò che hai selezionato in precedenza. Ciò significa che il pulsante potrebbe non dire "Aggiornamento remoto". Se non l'hai usato prima, verrà visualizzato "Pull". Quindi fai clic sulla freccia e vedrai "Aggiornamento remoto" nell'elenco delle opzioni.
Michael Hinds,

13

Diciamo che stiamo cercando la versione / 1.0.5

Quando git fetch -allè che non funziona e che non si può vedere il ramo remoto e git branch -rnon mostrare questo ramo specifico.

1. Stampa tutti i riferimenti da remoto (rami, tag, ...):

git ls-remote origin Dovrebbe mostrare il ramo remoto che stai cercando.

e51c80fc0e03abeb2379327d85ceca3ca7bc3ee5        refs/heads/fix/PROJECT-352
179b545ac9dab49f85cecb5aca0d85cec8fb152d        refs/heads/fix/PROJECT-5
e850a29846ee1ecc9561f7717205c5f2d78a992b        refs/heads/master
ab4539faa42777bf98fb8785cec654f46f858d2a        refs/heads/release/1.0.5
dee135fb65685cec287c99b9d195d92441a60c2d        refs/heads/release/1.0.4
36e385cec9b639560d1d8b093034ed16a402c855        refs/heads/release/1.0
d80c1a52012985cec2f191a660341d8b7dd91deb        refs/tags/v1.0

Nell'output viene visualizzato il nuovo ramo "release / 1.0.5".

2. Forza il recupero di un ramo remoto:

git fetch origin <name_branch>:<name_branch>

$ git fetch origin release/1.0.5:release/1.0.5

remote: Enumerating objects: 385, done.
remote: Counting objects: 100% (313/313), done.
remote: Compressing objects: 100% (160/160), done.

Receiving objects: 100% (231/231), 21.02 KiB | 1.05 MiB/s, done.
Resolving deltas: 100% (98/98), completed with 42 local objects.
From http://git.repo:8080/projects/projectX
 * [new branch]        release/1.0.5 -> release/1.0.5

Ora hai anche i ref in locale, fai il checkout (o qualsiasi altra cosa) questo ramo.

Lavoro fatto!


1
Sei un salvavita :)
Chakri

# 2 era quello che stavo cercando. Grazie!
Matteo

4

Sembra banale, ma il mio problema era che non ero nel progetto giusto. Assicurati di essere nel progetto in cui ti aspetti di partecipare; altrimenti, non sarai in grado di abbattere i rami corretti.


Oooops! Buono!
Marc

2

Ho usato la forza bruta e ho rimosso il telecomando e poi l'ho aggiunto

git remote rm <remote>
git remote add <url or ssh>

1

Quello che alla fine ha funzionato per me è stato aggiungere il nome del repository remoto al git fetchcomando, in questo modo:

git fetch core

Ora puoi vederli tutti in questo modo:

git branch --all

0

Puoi effettuare il checkout del ramo remoto / n git fetch && git checkout remotebranch

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.