2013-01-23 26 views
14

Trên máy cục bộ của tôi, tôi đã xóa tệp khỏi thư mục.Khôi phục các tệp được dàn dựng nhưng không được cam kết sau 'git rm -rf'

git init 
git add --all 

sau đó tôi đã viết (đừng hỏi tôi, tại sao! :))

git rm -rf 

Tôi không cam kết, được nêu ra. Bây giờ tôi có các thư mục trống trong dự án của tôi. Trong thư mục .gitobjects với 53 Mb tệp.

Tôi làm cách nào để khôi phục tệp của mình? Tôi đã thử các chương trình như Drill Disc và Stellar, nhưng không tìm thấy tệp của tôi. Và tôi không thể quay trở lại từ GIT.

Tôi làm cách nào để khôi phục các tệp bị mất?

+0

Nếu bạn không lấy lại chúng bằng cách sử dụng bất kỳ công cụ "phục hồi" nào, chúng sẽ biến mất. – Sven

+2

http://stackoverflow.com/questions/5788037/recover-from-git-reset-hard/6780036#6780036 điều này có thể hữu ích – pktangyue

Trả lời

10

(cập nhật) Sử dụng git fsck thay vào đó, nó là một lệnh dựng sẵn để lấy dữ liệu mà bạn đã một lần được bổ sung vào kho git.

git fsck --lost-found --unreachable 

sau khi xử lý lệnh, các tệp được truy xuất sẽ được đặt tại .git/lost-found/other, với tên tệp là băm sha256. Mặc dù tên gốc vẫn bị mất, nội dung sẽ quay lại.


Bạn có thể tìm thấy tệp của mình trong thư mục .git/objects.

Giả sử có một đối tượng .git/objects/2f/ae996f8f8f9298b41ba4fdbac3d62014f9579e, bạn có thể thực hiện

git cat-file -p 2fae996 

để có được nội dung của tập tin của bạn bị mất.

Nhưng tôi xin lỗi, tôi không có ý tưởng về việc xây dựng lại thư mục của bạn hoặc tự động thực hiện việc này.

+0

+1: Wow, thực sự. Kỳ lạ là các tệp có ở đó nhưng không thể truy cập được bằng bất kỳ cách nào bằng cách sử dụng các lệnh git thông thường. –

+0

Tôi không phải lo lắng về các thư mục, nhưng tôi cần các tập tin. "git cat-file" - lệnh này giống như "cat" trong * nix? Làm cách nào để lưu tệp trong thư mục khác? – user2003024

+0

bạn có thể lưu nó bằng cách chuyển hướng giống như lệnh unix thông thường. 'git cat-file object>/path/to/where/you/want/save/it', nhưng tôi nghĩ đó không phải là một ý tưởng thực sự tốt vì không có thông tin về tên tập tin. – dyng

1

bạn đã thử:

git reset --hard 

?

Hy vọng rằng hoạt động :)

+0

Sau 'git rm -rf', bạn thậm chí có thể thực hiện khôi phục cài đặt gốc một cách an toàn. – Flavius

+1

-1: Điều đó sẽ chỉ hoạt động nếu 'rm -rf' có thể đã được sử dụng. Xem [câu trả lời của tôi] (http://stackoverflow.com/a/14475121/572644) để được giải thích. –

+1

Lệnh này đã thay đổi mã thành lần commit cuối cùng và xóa tất cả các tệp đã sửa đổi. –

Các vấn đề liên quan