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
- 1. Come memorizzare SQLcipher password localmente
- 2. Come utilizzare UndecidableInstances localmente?
- 3. Come eseguire Postgres localmente
- 4. Come posso utilizzare Git localmente?
- 5. Come rimuovere un ramo localmente?
- 6. Come testare l'API twitter localmente?
- 7. Come si sviluppa OAuth localmente?
- 8. Impossibile trovare localmente 'xxxx'
- 9. Hask è localmente piccolo?
- 10. RStudio localmente + R cloudly
- 11. Publishing Gradle istantanee localmente
- 12. Padding disabilitato localmente
- 13. documentazione django localmente impostata
- 14. Tipo parametrico localmente astratto
- 15. Distribuisci l'applicazione locale localmente
- 16. Richiamando un file cancellato localmente da Mercurial
- 17. Come si può usare activemq non localmente?
- 18. come ripristinare una cartella eliminata localmente?
- 19. Come avviare localmente il server http
- 20. come eseguire localmente un WebJab di Azure
- 21. Come ospitare localmente il libphonenumber di google?
- 22. Come far configurare più utenti NPM localmente?
- 23. Spark - Come eseguire localmente un cluster autonomo
- 24. Come verificare localmente la connessione socket.io?
- 25. Come recuperare Richiesta Payload
- 26. doctest funzioni definite localmente
- 27. Utilizzare babel-local localmente
- 28. Localmente identificatore unico
- 29. Testare localmente HTTPS su Sinatra
- 30. Errore notAutorizzato con cloud_sql_proxy localmente
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? –