2012-04-22 26 views
6

Tôi vừa tạo một kho lưu trữ mới trên github. Bắt đầu với một thư mục chứa đầy đủ các tệp, các bước tôi đã làm là:Git pull đã xóa các thay đổi không được cam kết

git init 
git add -A 
git remote add origin ... 

#Now pull in the first commit that github made 
git pull origin master 

#Check everything is OK 
ls 

Eek! Tất cả các tệp của tôi đã biến mất! Chuyện gì đã xảy ra? Tôi có thể lấy lại chúng không?

+0

Bạn đã bao giờ cam kết và đẩy một cái gì đó? Các cam kết trên github? – ThiefMaster

+0

@ TheifMaster: Không. Tôi nghĩ rằng tôi nên kéo trong cam kết ban đầu từ github, sau đó cam kết thay đổi của tôi trên đó. – Eric

+0

Không có điều gì như "cam kết ban đầu". Kho lưu trữ mới không có bất kỳ cam kết nào. – ThiefMaster

Trả lời

10

Bạn có thể lấy lại chúng. Mặc dù điều duy nhất chỉ vào nó là chỉ số, git add vẫn đặt nội dung được thêm vào trong kho. Tôi sẽ bắt đầu với một số git fsck để tìm "lúng túng" (git là một đốm màu "không được nhắc đến") và các đốm màu đó, nếu có quá nhiều thứ tôi muốn làm như là find .git/objects -type f | xargs ls -lt.

+2

'git fsck --lost-found' có lẽ là cách dễ nhất. –

+3

Vì nó có thể không rõ ràng đối với một số người, bạn làm 'git cat-file -p ' trong đó đối số được đưa ra bởi lệnh 'git fsck' đầu ra. – cdmckay

+1

lủng lẳng mèo tập tin fsck những đốm màu. có rất nhiều từ buồn cười trong git dam – urmurmur

0

Vì bạn chưa bao giờ cam kết các tệp, xin lỗi. Các bước bạn cần thực hiện là:

git init 
git add . 
git commit -m 'Initial commit' 
git remote add origin ... 
git push origin master 

Hãy nhớ rằng, khi nghi ngờ, luôn cam kết. Miễn là bạn làm điều đó, bạn luôn có thể hoàn tác công cụ với git.

+0

Đó là lời khuyên tốt luôn luôn cam kết khi nghi ngờ, nhưng theo các hướng dẫn trong câu trả lời được chấp nhận sẽ cho phép bạn khôi phục tập tin không được cam kết. –

2

Tôi đồng ý với câu trả lời được chấp nhận, tuy nhiên trong trường hợp của tôi có quá nhiều kết quả cho git fsck. Giải pháp này là những gì đã giúp tôi xác định vị trí các tập tin bị mất:

Tìm kiếm một chuỗi trong file thiếu (s):

grep -rin <string_in_missing_file> .git/ 

Ví dụ:

grep -rin MyClassName .git/ 

Kết quả tìm kiếm:

.git//lost-found/other/3cfaa36226f52a5c1b38c2d2da3912656c998826:5:class MyClassName extends ParentClass 
.git//lost-found/other/e7b8923de4afb230ad523b5b515f50cb9c624248:5:class MyClassName extends ParentClass 

Trường hợp kết quả tìm kiếm là:

.git/<path_to_file>:<line_number_of_found_string>:<found_string_and_context> 

Sau đó, để khôi phục các tập tin:

git cat-file -p 3cfaa36226f52a5c1b38c2d2da3912656c998826 > ../<desired_file_path>/MyClassName.php 
Các vấn đề liên quan