Ho accidentalmente cancellato .git/index
, c'è un modo per recuperarlo? È eliminato definitivamente. Non ho ancora impegnato nulla.Come recuperare `.git/index` localmente?
risposta
Non penso sia possibile, non via git
in ogni caso (si può provare a guardare all'interno della directory del Cestino o qualsiasi mezzo di ripristino offerto dal filesystem). Otterrai un nuovo indice, tuttavia, non appena avrai impostato git add
o esegui qualcos'altro che richiede l'indice.
Se hai perso uno qualsiasi dei file che hai git add
Ed, si può passare attraverso ./git/objects (find .git/objects/ -type f |sed 's:\.git/objects/::; s:/::'
), ispezionare il contenuto di ogni con git cat-file -p $the_hash
, e una volta che hai trovato quello perduto , reindirizzare l'output in un file.
(Quando si git add
, una voce di nome di file va a .git/index
e il contenuto del file vengono memorizzati in .git/objects/
. Indice di Git è fatto delle voci dei nomi di file di un oggetto albero aspiranti che viene creato quando si commit
. È possibile visualizzare una rappresentazione leggibile dall'uomo dell'indice con git ls-files --stage
).
L'indice ha un po 'più di roba in esso, ma sì, è fondamentalmente una cache di name-and-hash-es. Per completezza, vale la pena menzionare che l'indice ha quattro possibili "slot" per nome: gli slot 1-3 sono usati solo durante un'unione in conflitto, e lo zero dello slot è dove va la normale, next-commit-to-make. – torek
È possibile recuperare l'indice dall'ultimo checkout con git reset
. Qualsiasi contenuto aggiunto da allora è ancora aggiunto, è nel repository, ma l'indice era l'unico posto in cui è stata registrata l'associazione di percorso e contenuto. Puoi avere git fsck eliminare gli oggetti non raggiungibili in una directory lost'n'found, vedi its docs, quindi il percorso più rapido su un territorio familiare è semplicemente rilasciare nuovamente il contenuto nel worktree e aggiungerlo di nuovo, git non duplicherà i contenuti ma recupererà la voce di indice.
Per ricostruire il file di indice, è possibile provare questi due comandi:
git reset # re-scan the working directory
git add -u # update the index
quindi è un repository pulito - basta cancellare l'intera directory e creare un nuovo repo? –
Hai già aggiunto qualcosa all'indice? Esistevano versioni particolari dei file che si desidera ripristinare e che sono stati messi in scena ma diversi dalla copia che si trova ora nell'albero di lavoro? –