Risposte:
Non capisco le ramificazioni di questo, ma come suggerito in questo thread , quando l'ho riscontrato l'ho appena fatto
$ mv .git/refs/remotes/origin/HEAD /tmp
(tenendolo in giro per ogni evenienza) e poi
$ git gc
ha lavorato senza lamentarsi; Non ho riscontrato alcun problema.
git prune
ha funzionato per me, un modo per eliminare i dati accumulati in Git ma a cui non fa riferimento nulla di utile.
$ mv .git/refs/remotes/origin/HEAD /tmp
$ git gc
git prune
git gc
funzionato per me
Il problema che ho riscontrato (che è lo stesso problema menzionato da @Stavarengo in questo commento sopra) è che il ramo remoto predefinito ( develop
nel mio caso) era stato eliminato, ma era ancora referenziato .git/refs/remotes/origin/HEAD
.
L'apertura .git/refs/remotes/origin/HEAD
nel mio editor ha mostrato questo:
ref: refs/remotes/origin/develop
L'ho modificato con cura in modo che punti al mio nuovo ramo predefinito e tutto è andato bene:
ref: refs/remotes/origin/master
L'indizio che mi ha fatto capire è che la corsa ha git prune
mostrato questo errore:
> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD
Dopo aver visto la risposta di Trenton, ho guardato la mia .git/refs/remotes/origin/HEAD
e ho visto che puntava anche a un vecchio ramo che ora è stato cancellato.
Ma invece di modificare il file da solo, ho provato la soluzione di Ryan:
git remote set-head origin --auto
Ha impostato automaticamente il file sul nuovo ramo e ha git gc
funzionato bene dopo.
git remote set-head $REMOTE --auto
nel mio caso, $ REMOTE è l'alias remoto, non l '"origine" predefinita, perché ho configurato più telecomandi.
Ho pensato che la soluzione fosse la seguente poiché sembrava funzionare, ma risulta che non risolve effettivamente il problema.
git remote set-head origin --auto
git prune
(come consigliato nel primo output del comando), quindi non sono in grado di dire esattamente cosa mi ha aiutato: primo, secondo o entrambi.
git remote set-head origin --auto
risolto il mio file refs / telecomandi / origine / HEAD senza che io dovessi usaregit prune
error: Multiple remote HEAD branches. Please choose one explicitly
e ho dovuto usare git remote set-head origin mybranch
(mentre il ramo "mybranch" era in fase di checkout) per far scomparire l'errore.
Sembra che i tuoi riferimenti simbolici potrebbero essere interrotti ... Prova a sostituirlo con il tuo ramo predefinito in questo modo: Ad esempio, il mio ramo predefinito è master
$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc
Questo dovrebbe risolverlo.
La causa di ciò per me stava lavorando in una cartella compressa in Windows. Quando la cartella è stata decompressa, ha danneggiato i file del pacchetto, causando altri strani problemi, come l'impossibilità di potare rami inesistenti.
L'unica soluzione era cancellare la directory di lavoro e clonare nuovamente i remoti del repository. Fortunatamente, potevo ancora eseguire il push e il pull degli aggiornamenti per assicurarmi che nulla andasse perso. Adesso va tutto bene.
master
a un altro chiamatodevelop
. Giorni prima ho cambiato di nuovo dadevelop
amaster
e ho cancellato il vecchio ramo predefinitodevelop
, ma nella mia directory di lavoro, il file.git/refs/remotes/origin/HEAD
puntava ancora arefs/remotes/origin/develop
cui non esiste più. In questa situazione la rimozione del file ha funzionato.