2012-10-07 8 views
99

Sto usando Dropbox per sincronizzare un repository git, ma ora quando provo e push sto ottenendo un errore:Git fatale: Riferimento ha formato non valido: 'refs/teste/master

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 cancellato il file in conflitto. Comunque, ottenendo l'errore git sopra però.

$ 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? Grazie.

risposta

0

Provate prima con uno git checkout master sulla filiale sana e ben denominata.

+0

Aggiornamento dell'output nel post originale. – Justin

+0

Hm, potresti provare un intero 'git push origin master', e anche incollare l'output di' git branch -a' per favore? – poke

+0

Lo stesso errore qui ... provare 'git branch -a' ha come risultato proprio questo errore! – trusktr

42

Il file in conflitto potrebbe essere in più posti, vorrei guardare in:

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

Oppure si potrebbe guardare in ogni parte del .git sottodirectory: find . -name '*conflicted*'

Oppure, in caso contrario, elencare i rami attivi con git branch -a ed elimina (git branch -d) qualcosa di sospetto.

+0

All'interno di '.git' ci sono file in conflitto ovunque. Li ho passati e li ho cancellati tutti, ed è stato risolto. Grazie. – Justin

+2

@Justin Sono contento di poterti aiutare. Se questa risposta o qualcun altro ha risolto il problema, contrassegnarlo come accettato. –

+2

Su Mac OS X usare: 'find. -name '* conflictted *' '(Modifica: formato) – xgMz

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 era l'apertura .git/refs/packed_refs e l'eliminazione di righe che contenevano il testo "in conflitto".

177

fare un backup del repository se non si è sicuri di questo, perché questi comandi sono irreversibili.

Per prima cosa, andare alla directory dei repository.

cd myrepo 

quindi in modo ricorsivo di ricerca per i file in conflitto ed eliminarli

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

, infine, rimuovere tutti i riferimenti "in conflitto" dal file compresso-arbitri 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

+0

Questo lo ha risolto anche per me. Grazie! – cecconeurale

+0

per utenti di macos 'find. -type f -name "* conflictted copy *" -delete' – Soyoes

8

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

L'ho risolto così semplicemente.

Appena eliminato la copia in conflitto. (XXXX copia in conflitto yyyy-mm-dd)

E tirarlo normalmente.

Si noti che il mio collega ha subito le modifiche prima di incasinare. E ha spinto di nuovo i suoi cambiamenti. Questa volta nessun arresto.:)

+1

ha funzionato assolutamente perfetto per me :) thx - per me dropbox ha creato un nome di stringa strano che non era compatibile con "update" – 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 pull/push e tutto va bene. Grazie! – DiscDev

0

mi è stato sempre lo stesso errore

fatal: Reference has invalid format: 'refs/heads/somebranch (1)'

per il seguente comando

git branch 

Poi, ho cercato per nome errato (nome del ramo seguito da (1)) usando il comando

find . -name 'somebranch (1)' 

E ha mostrato il seguente risultato

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

Quale è una versione duplicata di somebranch IMO. Così, ho rimosso questo eseguendo il comando find successivo da cancellare

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

Poi il comando ramo eseguire correttamente

git branch 
0

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

Puoi vai a /.git/packed_refs file ed elimina la riga per refs/tags/r0.2:3

Quindi ha iniziato a funzionare. Ma perché è successo in primo luogo, non lo so.

0

ho encounterd l'errore simile come

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

Semplicemente cancellazione del file .git/refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08) nel repository Dropbox remota ha risolto il problema.