Git ramo maestro corrotto


9

Apro il mio repository Git usando git Extensions su Windows 7 per un progetto di Visual Studio. È improvvisamente vuoto. Il repository esiste, ma tutti i miei commenti sono scomparsi.

Sto usando l'interfaccia grafica e credo che sia la prima volta che lo apro da quando lo hanno aggiornato.

Non sono sicuro di cosa fare per recuperare i miei impegni.

Quando scrivo

git log 

ricevo

fatale: brutta revisione di default 'HEAD'

Aggiornare
Dopo aver guardato https://stackoverflow.com/questions/1545407/recovering-broken-git-repository Provai

git fsck

è tornato:

errore: HEAD non valido
fatale: oggetto libero 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (memorizzato in .git / obj   ects / 36 / b7d9e1ca496bcb864c0b9c8671fcec97fbda31) è danneggiato

Rendimenti impegnativi:

errore: impossibile risolvere il riferimento HEAD: nessun file o directory di questo tipo
fatale: impossibile bloccare HEAD ref

e registra i ritorni dei master branch

$ git log master   avvertimento: ignorando i ref ref / heads / master.   avvertimento: ignorando i ref ref / heads / master.   fatale: argomento ambiguo 'maestro': revisione sconosciuta o percorso non funzionante   albero.   Usa '-' per separare i percorsi dalle revisioni

Continuerò semplicemente a incollare cose che potrebbero essere rilevanti

$ git reflog master
avvertimento: ignorando i ref ref / heads / master.
avvertimento: ignorando i ref ref / heads / master.
fatale: argomento ambiguo 'maestro': revisione sconosciuta o percorso non funzionante   albero.
Usa '-' per separare i percorsi dalle revisioni

Altre informazioni utili: ogni volta che cancello il file corrotto ne prende un altro. Sto iniziando a pensare che abbia qualcosa a che fare con il ramo principale che punta alla cosa sbagliata o qualcosa del genere. perché presumo che la testa stia puntando al maestro.

Un giorno più tardi:
Così ho avuto il mio compagno su questo, è stato in grado di passare attraverso i registri e ha detto che gli hash nei registri non corrispondono agli oggetti nella cartella. Ha provato a reimpostare il ramo master sui log o qualcosa del genere, mi sono un po 'perso. Spero che sia utile



1
@ scia per favore controlla l'aggiornamento
MrJD

Risposte:


2

Il repository esiste, ma tutti i miei commit sono scomparsi.

Cosa intendi esattamente? L'albero di lavoro è ancora lì? fa .git/ esistere? Ci sono dei file in esso?

I messaggi che hai postato suggeriscono che il file .git/HEAD non esiste. Definisce lo stato previsto dell'albero di lavoro (ciò che è stato estratto). Se quel file è sparito, git non sa dove fossi.

Potresti provare a creare il file da solo, con questo contenuto: ref: refs/heads/master

Se ti trovavi su un ramo diverso, sostituisci semplicemente "master" con il nome del ramo. Se non fossi su un ramo, sarebbe più complicato.

.git/logs/HEAD registra gli stati precedenti di HEAD, con le righe successive nella parte inferiore. Questa riga di esempio mostra un checkout: 25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <rainer.blome@wherever.you.are.com> 1346938344 +0200 checkout: moving from master to MySuperBranch

Gli SHA1 di fronte si riferiscono al commit. Dovresti riuscire a trovarli nel registro delle filiali, per esempio .git/logs/refs/heads/master.

L'output di git reflog che hai dato assomiglia refs/heads/master manca anche. Il suo unico contenuto dovrebbe essere lo SHA1 dell'ultimo commit su di esso (e una nuova riga). È possibile trovare l'ultimo SHA1 alla fine del log del ramo, per esempio .git/logs/refs/heads/master.


2

Se .git / HEAD esiste e il suo contenuto è ref: refs/heads/master quindi controlla il file refs / heads / master che deve contenere lo sha1 dell'ultimo commit.

Se quel file era corrotto e pieno di caratteri NULL, modifica quel file e metti da parte lo sha1 dell'ultimo commit .git/logs/HEAD o quello prima dell'ultimo commit.

Quindi fa git reset --hard 'sha1 of the commit that you selected'


era infatti pieno di caratteri NULL quindi ho inserito il precedente sha1 del commit, ma poi il reset di git ha provocato "errore: update_ref fallito per ref" HEAD ": impossibile bloccare ref" HEAD ": impossibile risolvere reference HEAD: argomento non valido "
fantabolous

0

Sembra che il tuo repository sia stato danneggiato. La cosa più semplice da fare sarebbe recuperare il repository da un backup o ripetere la clonazione del repository dalla fonte originale (supponendo che non avessi un sacco di lavoro nel repository).

Se il ripristino / clonazione non è un'opzione, consiglierei di leggere Pro Git (libro online gratuito o il versione cartacea ). L'intero libro è molto istruttivo, ma soprattutto guarda l'ultimo capitolo per capire come funziona Git internamente. Una volta che hai capito come funziona Git, dai un'occhiata a Linus istruzioni sul recupero di oggetti danneggiati .


Quindi, purtroppo non stavo salvando i file nascosti, .git era nascosto. Non ho davvero abbastanza tempo per leggere un intero libro, c'è qualcosa che pensi che potrei provare?
MrJD

"Leggere un libro sugli interni" potrebbe essere un buon consiglio generale, ma non aiuta a risolvere il problema specifico e la domanda a portata di mano.
Burhan Ali

0

Dopo aver navigato sul web per un po ', finalmente ho trovato questo e ha funzionato.

git fetch origin
git reset --hard origin/master
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.