2015-10-08 27 views
8

Qui è il mio caso:rotto filiale a git, fatale: la filiale corrente sembra essere rotto

  • stavo lavorando su un ramo.
  • I nuovi messaggi vengono inviati al telecomando.
  • Ritorno al ramo principale.

Ma improvvisamente dopo aver digitato git checkout master comando il mio computer ha riscontrato blue screen of death e una forza inaspettata spegnere successo. Dopo aver riavviato il mio computer ho controllato lo stato del mio attuale ramo e di conseguenza ho ottenuto ogni singolo file come nuovi file contrassegnati.

Ora, io sono bloccato a questo punto e dopo git log comando sto errore

$ git log 
fatal: your current branch appears to be broken 

ottenendo Come risolvere questo problema e recuperare il mio ramo ?.

Sto lavorando con Windows 7 e git bash ultima versione

Edit: Non voglio eliminare questo ramo.

+0

Quale contenuto del file '.git/HEAD'? Indica un nome di ramo valido? Il nome del ramo punta quindi a un hash di commit valido? – knittl

risposta

6

mi capita di incontrare problema simile su Windows 7. Nel mio caso, il file ramo corrente (riferimento da ./git/HEAD) sotto \.git\refs\heads era rotto.

Ho trovato il codice hash del ramo corrente interrotto su .git\logs\refs\heads con lo stesso nome di ramo.

E ho risolto il problema con l'apertura di quel file (.git\logs\refs\heads\xxx) tramite notepad e copiare il 4 ° numero (il codice hash) a (.git\refs\heads\xxx)

+0

La cartella .git era nascosta nel mio caso, guarda tu stesso. – PrakhaRaM

2

È nome del ramo ora probabilmente contiene alcuni caratteri speciali o qualcosa di simile.

Si dovrebbe andare alla radice-directory del vostro check-out (in cui la directory .git/ è) e

  1. Lista voce Modifica .git/packed-refs; se vedi una linea con il nome del tuo ramo, cancellala
  2. guarda in .git/refs/heads for un file che prende il nome dal tuo ramo; se si visualizza , eliminarlo
+0

Sembra trattare solo il mio come se "tutti i file fossero nuovi" dopo aver fatto questo: \ – rogerdpack

4

I file nella directory .git \ refs \ head sono le filiali. Controllare quei file. Dovrebbero contenere solo un singolo hash SHA-1 di oggetti commit. Questo hash è il tuo ultimo tasto SHA-1 e il tuo HEAD allo stesso tempo.

copia della chiave SHA-1 e di tipo

$ git cat-file -t 5917fefd485f655ab369d4e9eeda3c157c03f514 
commit 

$ git cat-file -p 5917fefd485f655ab369d4e9eeda3c157c03f514 
tree b75cab3c54b780075b312be3e878b389a2baf904 
parent 8235189aa22169295243d295fb1cc2ff2f8f7cd5 
author Ilker Cat <[email protected]> 1495136738 +0200 
committer Ilker Cat <[email protected]> 1495136738 +0200 

La seconda uscita è ciò che un commit oggetto contiene sostanzialmente. Prova a verificare se l'oggetto commit nel tuo ramo principale sotto .git \ refs \ heads \ master e le sue chiavi dell'albero SHA-1 e genitore non sono corrotte.

Anche alcuni apostrofi all'interno del file dei rami principali porteranno in un "ramo rotto". Deve contenere solo l'hash SHA-1 dell'oggetto di commit più recente e nient'altro.

1

Alcune volte potrebbe verificarsi a causa di problemi di autorizzazione dei file, controllare se si dispone delle autorizzazioni appropriate per tutti i file sotto il repository.

+0

Sì, ma in questo caso, l'unico utente che sono; avere tutti i diritti! – Suresh

1

Aveva lo stesso problema. La rimozione di .git \ refs \ heads \ ha risolto il problema per me.

3

È possibile che si verifichi questo errore se si tenta di rinominare un ramo in una diramazione (o una cartella).

Se succede, andare alle directory .git/logs/refs/heads/<name> e .git/refs/heads/<name>, e vedrete che il vostro ramo è ora una cartella con un file al suo interno.

In entrambe le cartelle, spostare il file al livello della cartella, verificare quel ramo, eliminare le cartelle ora vuote e ora si dovrebbe essere in grado di eseguire git checkout -b <name>/<subname> senza errori o git branch -M <name>/<subname>.

+1

Salvato la mia giornata, grazie! – CGK

+1

Non posso ringraziarti molto. Quasi un attacco mini-cuore! – 22kar