2016-07-08 13 views
9

Ich löschte versehentlich .git/index, gibt es eine Möglichkeit, es wiederherzustellen? Es ist endgültig gelöscht. Ich habe noch nichts zugesagt.Wie `.git/index` lokal wiederherstellen?

+1

seine so eine saubere Repository - nur das gesamte Verzeichnis löschen und eine neue Repo erstellen? –

+0

Hatten Sie dem Index noch etwas hinzugefügt? Gab es bestimmte Versionen von Dateien, die Sie wiederherstellen wollten, die zwar inszeniert wurden, sich aber von der Kopie auf dem Arbeitsbaum unterscheiden? –

Antwort

2

Ich glaube nicht, dass das möglich ist, nicht über git auf jeden Fall (Sie können versuchen, in Ihrem Papierkorb Verzeichnis oder was auch immer Mittel zur Wiederherstellung Ihres Dateisystems bietet). Sie erhalten jedoch einen neuen Index, sobald Sie etwas tun oder etwas anderes tun, das den Index benötigt.

Wenn Sie eine der Dateien verloren haben, die Sie git add ed haben, können Sie durch ./git/objects gehen (find .git/objects/ -type f |sed 's:\.git/objects/::; s:/::' ), den Inhalt jeder mit git cat-file -p $the_hash überprüfen, und wenn Sie die verlorenen einer gefunden haben , leiten Sie die Ausgabe in eine Datei um.

(Wenn Sie git add, ein Dateinamen-Eintrag zu .git/index geht und der Inhalt der Datei gespeichert zu bekommen in .git/objects/. Git-Index setzt sich aus den Dateinamen Einträge eines Objekts Möchtegern-Baum gemacht, die erstellt wird, wenn Sie commit. Sie sehen können eine für Menschen lesbare Darstellung des Indexes mit git ls-files --stage).

+1

Der Index hat ein bisschen mehr Zeug, aber ja, es ist im Grunde ein Cache von Name-und-Hash-es. Der Vollständigkeit halber sei erwähnt, dass der Index vier mögliche "Slots" pro Name hat: Die Slots 1-3 werden nur während einer konflikthaften Zusammenführung verwendet und der Slot 0 ist der Punkt, an dem der normale Next-Make-to-make-Eintrag abläuft. – torek

2

Sie können den Index zum letzten Checkout mit git reset wiederherstellen. Alle Inhalte, die Sie seither hinzugefügt haben, werden immer noch hinzugefügt, sie befinden sich im Repository, aber der Index war der einzige Ort, an dem die Zuordnung von Pfad und Inhalt aufgezeichnet wurde. Sie können git fsck nicht erreichbare Objekte in ein verlorenes Verzeichnis löschen lassen, siehe its docs, dann ist der schnellste Weg über vertrautes Gebiet, den Inhalt einfach wieder in den Arbeitsbaum zu legen und wieder hinzuzufügen, git wird den Inhalt nicht duplizieren wird den Indexeintrag wiederherstellen.

8

die Indexdatei neu zu erstellen, können Sie diese beiden Befehle versuchen:

git reset   # re-scan the working directory 
git add -u  # update the index 
Verwandte Themen