2009-10-09 12 views
9

mio repository git di lavoro è rotto, si perdono le tracce a tutti i file in essa contenuti, vale a direRecupero repository git rotto

 
$ git log 
fatal: bad default revision 'HEAD' 
 
$ git status 
... told me that all the files are new 

Tuttavia, la directory contiene .git miei oggetti.

 
$ du -sh .git 
34M .git 
 
$ git count-objects 
4151 objects, 32692 kilobytes 
 
$ git --version 
git version 1.6.0.4 

L'ultima cosa che ricordo di aver fatto prima è andata male stava creando (clone --mirror) un archivio di backup a un server NFS montato. Tuttavia, il repository di backup clonato viene interrotto allo stesso modo.

Come posso ripristinare il mio repository?

+0

Esiste un ramo 'master' nel repository? Inoltre, ottieni un risultato diverso con 'git log --all'? –

+0

No, 'git branch -a' non mi dice nulla. – Eyoka

risposta

8

Deve esserci stato qualcosa oltre al clone, ma so quanto sia difficile ricordare quelle cose.

La prima cosa che vuoi fare è cercare in .git/refs e vedere se c'è qualcosa di valido (non sono troppo ottimista dato che dici che non sembrano esserci rami, ma ne vale la pena un colpo). Se esistono riferimenti validi, potresti ottenere alcune informazioni dal git-reflog.

Successivamente, vorrei iniziare a dare un'occhiata a git-fsck. Il suo scopo principale è verificare la connettività e la validità degli oggetti nel database. A seconda di cosa è successo esattamente al tuo repository, potresti aver bisogno di --unreachable o --lost-found. Speriamo che gli oggetti siano intatti, quindi tutto ciò che devi fare è trovare alcuni hash di commit penzolanti da controllare e ricreare i rami in.

+0

Grazie. Ho risolto il repository manualmente. Risultò che i rami (file in .git/refs/heads) mancavano, ma gli oggetti erano intatti. Sono stato in grado di ottenere hash di commit della punta di ogni ramo da .git/logs/HEAD, e li ho usati per ricreare i file dei rami. Allora non conoscevo il comando git-fsck. Tuttavia sono ancora curioso di sapere come è successo, ovviamente non ho fatto

git branch -d
. Non conosco molti comandi Git, gli unici che ricordo sono stati
git reset
e
git remote rm ...
Eyoka

1

È possibile esaminare manualmente, ma ciò richiederebbe una certa conoscenza del formato del repository.

Senza guardare il repository è difficile dire cosa sta succedendo, ma probabilmente qualche file è stato danneggiato.

Eseguire git fsck e indica se il repository è ancora valido.

Pubblica il risultato della corsa git fsck e questo dovrebbe aiutarci ad aiutarti.

1

Provare a verificare se ognuno dei file in .git/è di proprietà dell'utente corrente.

Ho avuto lo stesso problema, quando ho realizzato alcuni commit con l'utente root e che creava oggetti (sotto .git/objects) dove apparteneva a root, attivando errori durante l'esecuzione di git come utente normale.

Questo comando ha risolto il problema:

sudo chown jb:jb .git/ -R * 
1

ho avuto questo problema solo ora, dopo la mia domanda GitHub (PC) si è schiantato. Il mio ramo è scomparso quando si utilizza git branch e continuava a promettermi di eseguire il commit iniziale. Ho risolto il problema individuando la mia filiale in .git/refs/heads/ e rinominandola da mybranch.lock a mybranch (rimuovere il blocco).

+0

Questa risposta mi ha aiutato nel mio caso. Stavo usando GitHub per Windows e improvvisamente ha trattato ogni file nel repository come un nuovo file. log git restituito "fatale: revisione errata di default" HEAD "". git fsck restituì un sacco di impegni penzolanti. Ho appena dovuto rinominare il file master.lock per padroneggiare –

0

Ho riscontrato questo problema dopo che uno sviluppatore ha effettuato il $ git init all'interno del bare master di un repository centralizzato.

Se si sta lavorando con un repository senza directory di lavoro, cercare una cartella .git; l'eliminazione di questo dovrebbe risolvere il problema.