2016-07-08 15 views
9

Tôi vô tình xóa .git/index, có cách nào để khôi phục không? Nó bị xóa vĩnh viễn. Tôi chưa cam kết gì cả.Cách khôi phục `.git/index` cục bộ?

+1

do đó, một kho sạch của nó - chỉ cần xóa toàn bộ thư mục và tạo ra một repo mới? –

+0

Bạn đã thêm bất kỳ thứ gì vào chỉ mục chưa? Có phiên bản cụ thể của các tập tin mà bạn muốn phục hồi đã được tổ chức nhưng khác với bản sao mà bây giờ là trên cây làm việc? –

Trả lời

2

Tôi không nghĩ rằng có thể, không phải thông qua git anyway (bạn có thể thử tìm trong thư mục Thùng rác của bạn hoặc bất kỳ phương tiện phục hồi cung cấp tệp của bạn). Tuy nhiên, bạn sẽ nhận được chỉ mục mới ngay khi bạn git add điều gì đó hoặc thực hiện điều gì đó khác yêu cầu chỉ mục.

Nếu bạn đã mất bất kỳ tệp nào mà bạn đã truy cập ./git/objects (find .git/objects/ -type f |sed 's:\.git/objects/::; s:/::' ), hãy kiểm tra nội dung của mỗi tệp bằng git cat-file -p $the_hash và sau khi bạn tìm thấy tệp bị mất , chuyển hướng đầu ra đến một tệp.

(Khi bạn git add, một mục filename đi vào .git/index và các nội dung tập tin được lưu trữ trong .git/objects/. Index Git được làm bằng các mục tên tập tin của một-sẽ là đối tượng cây đó được tạo ra khi bạn commit. Bạn có thể xem một biểu diễn có thể đọc được của con người với chỉ số git ls-files --stage).

+1

Chỉ mục có nhiều thứ hơn một chút trong đó, nhưng có, về cơ bản nó là một bộ đệm của tên-và-băm-es. Đối với một số tính đầy đủ, điều đáng nói đến là chỉ mục có bốn "vị trí" cho mỗi tên: các vị trí 1-3 chỉ được sử dụng trong quá trình hợp nhất xung đột và vị trí số 0 là nơi mục nhập thông thường, cam kết tiếp theo thực hiện. – torek

2

Bạn có thể khôi phục chỉ mục như lần thanh toán cuối cùng với git reset. Bất kỳ nội dung nào bạn đã thêm từ đó vẫn được thêm vào, nó nằm trong kho lưu trữ, nhưng chỉ mục là nơi duy nhất ghi lại liên kết đường dẫn và nội dung. Bạn có thể có git fsck thả các đối tượng không thể truy cập vào một thư mục bị mất, xem its docs, sau đó là con đường nhanh nhất trên lãnh thổ quen thuộc là chỉ thả nội dung trở lại trong worktree và thêm nó một lần nữa, git sẽ không trùng lặp nội dung nhưng nó sẽ khôi phục mục nhập chỉ mục.

8

Để xây dựng lại các tập tin chỉ mục, bạn có thể thử hai lệnh dưới đây:

git reset   # re-scan the working directory 
git add -u  # update the index 
Các vấn đề liên quan