fetch in git non ottiene tutti i rami


202

Ho clonato un repository, dopo il quale qualcun altro ha creato un nuovo ramo, sul quale mi piacerebbe iniziare a lavorare. Ho letto il manuale e mi sembra molto semplice. Stranamente non funziona e tutti i post che ho trovato suggeriscono che sto facendo la cosa giusta. Quindi mi sottoporrò all'eccitazione, perché ci deve essere ovviamente qualcosa di sbagliato in questo:

L'azione corretta sembra essere

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

A questo punto c'è un problema, per qualche motivo dopo git fetchche non riesco a vedere il ramo remoto dev-gml. Perchè no? Se clonerò il repository di recente, è lì, quindi sicuramente esiste il ramo remoto:

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

Ho provato git update, git pull, git fetch --all, git pretty-pleasein tutte le possibili permutazioni ...


45
Cosa git config --get remote.origin.fetchproduce? In caso contrario +refs/heads/*:refs/remotes/origin/*, probabilmente dovrebbe essere.
torek,

sì, questo è esattamente ciò che produce
Edward Newell il

3
Esattamente lo stesso problema, ma il commento sopra lo ha risolto! Ho avuto +refs/heads/master:refs/remotes/origin/mastercon masterinvece di*
Mirko il

1
Lo stesso problema per me, ma nessuno dei suggerimenti di questa pagina lo risolve. Strano.
Magnus,

1
@ thoni56: Sì, ciò è probabilmente dovuto a un clone superficiale.
Trần Việt Hoàng,

Risposte:


386

Il problema può essere visto quando si controlla l' remote.origin.fetchimpostazione
(Le righe che iniziano con $sono prompt bash con i comandi che ho digitato. Le altre righe sono l'output risultante)

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

Come puoi vedere, nel mio caso, il telecomando era impostato per recuperare il ramo principale in modo specifico e solo. L'ho corretto come di seguito, incluso il secondo comando per verificare i risultati.

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

Il jolly *ovviamente significa tutto sotto quel percorso.

Purtroppo ho visto questo commento dopo che avevo già scavato e trovato la risposta per tentativi ed errori.


2
Probabilmente questa dovrebbe essere la risposta accettata, poiché in realtà ha risolto il problema nel post originale.
LocalPCGuy

1
solo una nota a margine, ho dovuto aggiungere il --replace-allparametro per sostituire tutti i valori sulla configurazione per il mioremote.origin.fetch
Garis M Suero

4
Nota che ciò può accadere se hai clonato il tuo repository con un solo ramo, ad es.git clone <url> --branch <branch> --single-branch [<folder>]
Narretz,

2
Controlla la risposta di
stux

5
Questo potrebbe accadere quando cloni congit clone ... --depth 1
Anatolii Bivol il

107

Ho avuto questo problema oggi su un repository.

Non era il +refs/heads/*:refs/remotes/origin/*problema secondo la soluzione migliore.

Il sintomo era semplicemente quello git fetch origino git fetchsemplicemente non sembrava fare nulla, anche se c'erano rami remoti da recuperare.

Dopo aver provato molte cose, ho rimosso il telecomando di origine e lo ho ricreato. Questo sembra averlo corretto. Non so perché.

rimuovere con: git remote rm origin

e ricreare con: git remote add origin <git uri>


14
Ho avuto la corretta configurazione git per remote.origin.fetchie +refs/heads/*:refs/remotes/origin/*. La soluzione di cui sopra mi ha aiutato.
Newbee,

9
Questa soluzione è stata quella giusta anche per me. Questo è un peccato perché indica che esiste potenzialmente un bug in Git.
Robert Oschler,

2
Anche questo ha risolto il mio problema. Mi sembra anche di avere questo problema su una macchina con la versione 2.19.1v di git ma non l'ho riscontrato su un'altra macchina con la versione 2.17.1 di git
jerpint

6
git remote update originha funzionato per me. Immagino che qualcosa avesse bisogno di essere rinfrescato?
Felipe Gerard,

2
git remote update originnon ha funzionato per me, ma la rimozione e l'aggiunta del telecomando ha funzionato.
Anatoliy Kmetyuk

58

Aggiornamento remoto

Devi correre

git remote update

o

git remote update <remote> 

Quindi è possibile eseguire git branch -rper elencare i rami remoti.

Acquista una nuova filiale

Per tenere traccia di un (nuovo) ramo remoto come ramo locale:

git checkout -b <local branch> <remote>/<remote branch>

o (a volte non funziona senza extra remotes/):

git checkout -b <local branch> remotes/<remote>/<remote branch>

Schede utili di Git


5
Ma il mio problema è che non riesco a fare il checkout di un ramo remoto esistente , perché il mio client git non pensa che esista. Vedi la mia domanda Nota che quando corro git fetchseguito da git branch -aesso non mostra tutti i rami. Ho dovuto eliminare la mia directory di lavoro e ripetere la clonazione per vedere il ramo dev-gmlcreato da un collaboratore. Questa volta ha funzionato, ma ci ramificheremo spesso!
Edward Newell,

Ehi @EdwardNewell, grazie per la risposta, solo per farti sapere, il tuo link cheat.errtheblog.com/s/git è morto per me ...
Kjellski,

È passato molto tempo da quando ho posto questa domanda per la prima volta, e mi sono appena fatto un rumore metallico perché qualcuno ha postato di nuovo. Accetto questa risposta, anche se in origine nulla ha funzionato per me. Il motivo per cui ho finalmente segnato questo corretto è perché sospetto che ciò che ha scritto Edit:molto bene potrebbe aver funzionato. È quello che proverei se dovessi ancora affrontare il problema. HTH
Edward Newell,

Per la cronaca, la parte che mi ha aiutato qui è git remote update origin. Ciò ha reso visibile il ramo mancante tramite git branch -l -r. (Ho dato un'occhiata git config --get remote.origin.fetche l'output è stato +refs/heads/*:refs/remotes/origin/*come previsto.)
Robert Dodier,


4

Per renderlo più specifico, crea un ramo di tracciamento, il che significa che ora stai seguendo un ramo remoto.

git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental

Dopo di che puoi

git branch   # to see the remote tracking branch "exp" created .

Quindi lavorare su quel ramo lo fa

git checkout branchname
git checkout exp

Dopo aver apportato modifiche al ramo. È possibile eseguire il getch fetch e git merge con il ramo di tracciamento remoto per unire le modifiche e passare al ramo remoto come di seguito.

git fetch origin
git merge origin/experimental  
git push origin/experimental

Spero che ti aiuti e ti dia un'idea di come funziona.


1

Ho avuto un problema simile, tuttavia nel mio caso ho potuto tirare / spingere al ramo remoto ma git status non ho mostrato lo stato del ramo locale con quelli remoti.

Inoltre, nel mio caso git config --get remote.origin.fetch non ha restituito nulla

Il problema è che c'era un errore di battitura in .git/config file nella riga di recupero del rispettivo blocco remoto. Probabilmente qualcosa che ho aggiunto per errore in precedenza (a volte guardo direttamente questo file o addirittura lo modifico)

Quindi, controlla se la tua voce remota nel .git/configfile è corretta, ad esempio:

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*

0

Ciò potrebbe essere dovuto a un momento del palmo della faccia: se passi da un clone all'altro è facile ritrovarti nell'albero dei sorgenti sbagliato cercando di estrarre un ramo inesistente. È più facile quando i cloni hanno nomi simili o i repository sono cloni distinti per lo stesso progetto da ciascuno dei molteplici collaboratori. Un nuovo clone git sembrerebbe ovviamente risolvere quel "problema" quando il vero problema sta perdendo la concentrazione o il contesto di lavoro o entrambi.


0

Ho dovuto andare nei miei repository remoti GitExtensions poiché nulla qui sembrava funzionare. Lì ho visto che 2 rami non avevano alcun repository remoto configurato. dopo la regolazione appare come segueinserisci qui la descrizione dell'immagine

Il ramo di avviso noExternal3mostra ancora come non avere un repository remoto. Non sono sicuro di quale combinazione di comandi bash l'avrebbe trovata o modificata.


0

Ho avuto lo stesso problema oggi configurando il mio repository da zero. Ho provato di tutto, niente ha funzionato tranne rimuovere l'origine e aggiungerlo nuovamente.

git remote rm origin
git remote add origin git@github.com:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched

-1

Abbiamo avuto lo stesso problema e devi usarlo

git fetch

git push origin branch_name

git branch -r

Spero che questo aiuti qualcuno che sta affrontando lo stesso problema

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.