Git fatal: il riferimento ha un formato non valido: "refs / heads / master


101

Sto usando Dropboxper sincronizzare un gitrepository, ma ora quando provo e pushricevo un errore:

fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'

Quindi, sembra che Dropbox abbia rilevato un conflitto e ne abbia creato una copia. Ok, nessun problema, quindi ho eliminato il file in conflitto. Tuttavia, ottenendo l'errore git sopra riportato.

$ git checkout master
    M   index.html
    Already on 'master'
$ git add .
$ git commit -a -m "Cleanup repo"
    [master ff6f817] Cleanup repo
    1 file changed, 5 insertions(+), 5 deletions(-)
$ git push
    fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'
    The remote end hung up unexpectedly`

Come posso risolvere questo problema? Grazie.

Risposte:


178

fai un backup del tuo repository se non sei sicuro di questo, perché questi comandi sono irreversibili.

per prima cosa, vai alla directory del repository.

cd myrepo

quindi cercare ricorsivamente i file in conflitto ed eliminarli

find . -type f -name "* conflicted copy*" -exec rm -f {} \;

infine, rimuovi tutti i riferimenti "in conflitto" dal file compressi-refs di git

awk '!/conflicted/' .git/packed-refs > temp && mv temp .git/packed-refs

1
Ho avuto lo stesso problema e questo lo ha risolto per me. Grazie!
erik

Questo ha risolto anche me. Grazie!
cecconeurale

1
per utenti find . -type f -name "* conflicted copy*" -delete
macos

42

Il file in conflitto potrebbe trovarsi in più punti, esaminerei:

.git/logs/refs/remotes/origin/
.git/logs/refs/heads/
.git/refs/remotes/origin/
.git/refs/heads/

Oppure potresti cercare ovunque nella .gitsottodirectory:find . -name '*conflicted*'

Oppure, altrimenti, elenca i rami attivi con git branch -aed elimina ( git branch -d) qualsiasi cosa sospetta.


Ci sono file in conflitto ovunque all'interno di .git. Li ho esaminati e cancellati tutti ed è stato risolto. Grazie.
Justin

2
@ Justin Glad ho potuto aiutare. Se questa o un'altra risposta ha risolto il tuo problema, contrassegnala come accettata.
Marco Leogrande

2
Su Mac OS X usa: find . -name '*conflicted*'(Modifica: formato)
xgMz

1
@xgMz Grazie, aggiornerò la mia risposta, poiché la tua soluzione ha validità generale.
Marco Leogrande

1
Con un semplice findho ottenuto un unico file in conflitto e ho risolto manualmente il problema con due mv. Farlo lentamente e ragionare passo dopo passo è la via più sicura.
pid

8

Questo accade anche al nostro team quando il mio collega spinge le sue modifiche e spegne il PC prima che Dropbox venga aggiornato.

L'ho risolto in modo così semplice.

Ho appena eliminato la copia in conflitto. (Copia in conflitto di XXXX yyyy-mm-dd)

E tiralo normalmente.

Nota che il mio collega ha avuto le modifiche prima incasinato. E ha spinto di nuovo i suoi cambiamenti. Questa volta nessun arresto. :)


1
ha funzionato perfettamente per me :) grazie - per me Dropbox ha creato uno strano nome di file di stringa che non era compatibile con l '"aggiornamento"
cV2

1
Questo ha funzionato per me! C'era un file con "copia in conflitto" nel nome nella cartella / refs / heads e l'eliminazione, quindi tirare / spingere e tutto va bene. Grazie!
DiscDev

7

Sono stato in grado di eliminare tutti i file in conflitto dalla mia cartella .git, ma ho continuato a ricevere errori sui file che non esistevano più.

La soluzione per me è stata l'apertura .git/refs/packed_refse l'eliminazione delle righe che contenevano il testo "in conflitto".


1

Per me stava dando errore: fatal: Reference has invalid format: 'refs/tags/r0.2:3'

Puoi andare al file /.git/packed_refs ed eliminare la riga perrefs/tags/r0.2:3

Poi ha iniziato a funzionare. Ma perché sia ​​successo in primo luogo non lo so.


0

Prova un git checkout masterprimo a salire sul ramo sano e ben nominato.


Output aggiornato nel post originale.
Justin

Hm, potresti provare un intero git push origin mastere incollare anche l'output di git branch -aplease?
colpisci il

Stesso errore qui ... provando git branch -arisultati in questo stesso errore!
trusktr

Il problema si trova nel repository remoto, quindi estrarlo o estrarlo non lo risolve. Le altre risposte sopra si riferiscono alla correzione diretta dei file sul telecomando e funzionano perfettamente. IL TUO CONSIGLIO È MOLTO BUONO ma non è una risposta al problema.
pid

0

Ho ricevuto lo stesso errore

fatale: il riferimento ha un formato non valido: "refs / heads / somebranch (1)"

per il seguente comando

git branch

Quindi, ho cercato il nome errato (nome del ramo seguito da (1)) utilizzando il comando

find . -name 'somebranch (1)'

E ha mostrato il seguente risultato

./.git/refs/heads/somebranch (1)

Che è una versione duplicata di un IMO del ramo . Quindi, l'ho rimosso eseguendo il comando find seguito da delete

find . -name 'somebranch (1)' -print -exec rm -rf {} \;

Quindi il comando branch viene eseguito correttamente

git branch

0

Ho riscontrato un errore simile come

fatal: Reference has invalid format: 'refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)'

La semplice eliminazione del file .git/refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)nel repository Dropbox remoto ha risolto il 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.