2016-07-08 18 views
9

Przypadkowo usunąłem .git/index, czy istnieje sposób na odzyskanie? Został trwale usunięty. Niczego jeszcze nie popełniłem.Jak odzyskać `.git/index` lokalnie?

+1

więc jej czyste repozytorium - po prostu usunąć cały katalog i utworzyć nowe repo? –

+0

Czy dodałeś coś jeszcze do indeksu? Czy istniały określone wersje plików, które chcesz odzyskać, które zostały zainscenizowane, ale różne od kopii znajdującej się teraz w drzewie roboczym? –

Odpowiedz

2

Nie sądzę, że to możliwe, nie przez git tak (możesz spróbować zajrzeć do swojego katalogu Kosz lub jakikolwiek sposób odzyskania twoich ofert systemu plików). Otrzymasz nowy indeks, gdy tylko uzyskasz coś innego lub zrobisz coś, co wymaga indeksu.

Jeśli straciłeś każdy z plików, które zostały git add ed, można przejść przez ./git/objects (find .git/objects/ -type f |sed 's:\.git/objects/::; s:/::' ), sprawdzić zawartość każdego z git cat-file -p $the_hash, a kiedy już znalazł stracił jednego , przekieruj dane wyjściowe do pliku.

(kiedy git add, wpis filename idzie .git/index i zawartość pliku przechowywane w .git/objects/. Indeks Git jest wykonana z wpisami nazw plików o niedoszłej drzewa obiektu, który zostanie utworzony podczas commit. Można zobaczyć czytelna dla człowieka reprezentacja indeksu z git ls-files --stage).

+1

Indeks ma w sobie trochę więcej rzeczy, ale tak, to w zasadzie pamięć podręczna nazwisk i tablic. Dla pewnej kompletności warto wspomnieć, że indeks ma cztery możliwe "sloty" na nazwę: sloty 1-3 są używane tylko podczas konfliktu, a slot zero to normalny wpis next-commit-to-make. – torek

2

Możesz odzyskać indeks od ostatniego zamówienia z git reset. Wszelkie treści dodane od tego czasu są nadal dodawane, znajdują się w repozytorium, ale indeks był jedynym miejscem, w którym zarejestrowano powiązanie ścieżki i treści. Możesz mieć git fsck upuszczając nieosiągalne obiekty do katalogu lost'n'found, zobacz its docs, wtedy najszybsza trasa po znanym terytorium to po prostu upuścić zawartość z powrotem do worktree i dodać ją ponownie, git nie powieli treści, ale odzyska wpis indeksu.

8

Aby przebudować plik indeksu, można spróbować tych dwóch komend:

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