Il ramo remoto non viene visualizzato in "git branch -r"


140

Ho spinto verso un repository Bitbucket remoto e recentemente un collega ha spinto un nuovo ramo che ha creato nello stesso repository.

Sto cercando di recuperare le modifiche che ha caricato.

 $ git branch -a
 * master
 localbranch1
 localbranch2
 remotes/origin/master

$ git branch -r origin / master

Nell'interfaccia utente Web di Bitbucket posso vedere il ramo che ha creato. Come posso fare questo?

Prossimo tentativo:

$ git fetch bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

Se il ramo che ha creato si chiama new_branch_b, dovrei aspettarmi di vedere quanto segue?

$ git branch -r
origin/master
origin/new_branch_b

Terzo tentativo:

$ git remote update
Fetching bitbucket
Password for 'https://xxxxx@bitbucket.org':
From https://bitbucket.org/user/repo
 * branch            HEAD       -> FETCH_HEAD

$ git branch -r
  origin/master

Quarto tentativo:

[remote "bitbucket"]
url = https://user@bitbucket.org/user/repo.git

Ho chiamato il telecomando bitbucketpiuttosto che l'origine (almeno è quello che ricordo; l'ho installato qualche tempo fa)

Quinto tentativo:

Ho aggiornato la configurazione remota di Bitbucket secondo la risposta di kan :

$ git config -e

[remote "bitbucket"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/bitbucket/*

Per la maggior parte delle persone si chiamerà origine:

[remote "origin"]
    url = https://user@bitbucket.org/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

In seguito,

$ git remote update

Fetching bitbucket
Password for 'https://user@bitbucket.org':
remote: Counting objects: 48, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 35 (delta 21), reused 0 (delta 0)
Unpacking objects: 100% (35/35), done.
From https://bitbucket.org/user/repo
 * [new branch]      branch_name1 -> origin/branch_name1
 * [new branch]      branch_name2    -> origin/branch_name2

.... e così via.

Penso git fetch originche funzionerebbe anche per git remote update.


1
Fantastico, ma forse aveva più senso usare refs/remotes/bitbucket/*invece di refs/remotes/origin/*.
gennaio

Grazie, debitamente annotato sulla coerenza dei nomi. Tuttavia, probabilmente ha più senso cambiare bitbucket in origine! Convenzione e tutto il resto :)
feargal

1
git fetch originfa il lavoro
Piatto

Risposte:


108

La remotesezione specifica anche le regole di recupero. Puoi aggiungere qualcosa del genere in esso per recuperare tutti i rami dal telecomando:

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

(O sostituire origincon bitbucket.)

Si prega di leggere qui: 10.5 Git Internals - The Refspec


3
Ciò ha risolto il mio problema di ramificazione in corso in Git che avevo da settimane. All'improvviso tutto il materiale di aggiornamento remoto git ha effettivamente iniziato a funzionare. Grazie!
PålOliver,

2
Per qualche motivo, sembrava: fetch = +refs/heads/master:refs/remotes/origin/masterper me. Sostituzione mastercon *risolto il mio problema.
Sebastian Blask,

2
Questo è molto utile se hai convertito un clone poco profondo in un unslowlow.
Warpzit,

@kan Sai perché questo a volte succede? Mi capita solo quando git cloneun progetto. Non ricordo di aver fatto qualcosa di speciale con il mio git locale.
dotnetCarpenter,

@dotnetCarpenter Non sono sicuro ... non mi è mai successo inaspettatamente. È possibile che sia clonestato interrotto e poi ripreso? O qualcos'altro ha acceduto al repository contemporaneamente?
gennaio

218

Aggiorna il tuo telecomando se non l'hai ancora fatto:

$ git remote update
$ git branch -r

1
Sto usando il client GitHub su Win e talvolta non aggiorna i rami remoti. La prima riga "git remote update" funziona come un incantesimo. Facile e pulito
Stefano Buora

dopo git remote updateche posso vedere il nuovo ramo nell'interfaccia utente. Grazie
Tinkaal Gogoi

Non ha aiutato
dKab

Penso di aver già recuperato con successo il ramo, ma dovevo solo vederlo elencato git branch -r. Su git-scm.com/docs/git-branch dice "L'opzione -r fa elencare i rami di tracciamento remoto e l'opzione -a mostra sia i rami locali sia quelli remoti". git remote updaterecupera tutti i rami di tutti i telecomandi elencati in git remote -v.
Rock Lee

Dopo aver eseguito questo sono stato in grado di correre git checkout origin/mastere poi ramificato da quella testa staccata al mio ramo principalegit branch master; git checkout master
Dfranc3373

35

Se cloni con il --depthparametro, si imposta .git/confignon per recuperare tutti i rami, ma solo master.

Puoi semplicemente omettere il parametro o aggiornare il file di configurazione da

fetch = +refs/heads/master:refs/remotes/origin/master

per

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

1
Grazie! La tua risposta risolve facilmente il problema e sembra il modo corretto di farlo. Ma dovresti aggiungere che il file di configurazione è in .git/config, così le persone possono trovarlo.
dotnetCarpenter il

19

Ho avuto lo stesso problema. Sembra che la soluzione più semplice sia semplicemente rimuovere il telecomando, leggerlo e recuperarlo.


1
Trascorrevo così tanto tempo a trovare questa risposta. Questo ha funzionato senza alcun problema. Grazie. :)
kisanme,

1
Ha funzionato anche per me, abbastanza strano che questo abbia risolto il problema
CailinP

1
git remote -vti mostrerà i tuoi telecomandi in modo da poter ottenere l'URL, git remote rm originrimuoverlo, git remote add origin <url>aggiungerlo di nuovo.
Siddhartha,

Questo ha funzionato per me. Ho avuto un sottomodulo git che in qualche modo non ha recuperato alcun ramo remoto del master. Rimozione e aggiunta di nuovo risolto.
Zamrony P. Juhara,

ha funzionato per me, ma ora ricevo un avvisowarning: ignoring broken ref refs/remotes/origin/HEAD
dafnahaktana il

7

Purtroppo, git branch -ae git branch -rnon senza mostrare tutte le filiali remote, se non si è eseguito un "git fetch".

git remote show originfunziona costantemente tutto il tempo. git show-refMostra anche tutti i riferimenti nel repository Git. Tuttavia, funziona esattamente come il git branchcomando.

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.