2009-03-11 33 views
8

thể trùng lặp:
Restore a deleted file in a Git repoKhông thể phục hồi một tập tin trong Git

Tôi có hai chi nhánh tại Git của tôi, tổng thể và newFeature. Tại chi nhánh newFeature, tôi loại bỏ các fileA vật lý đầu tiên trong thiết bị đầu cuối và sau đó trong Git bởi

git rm fileA 

Sau đó, tôi chạy

git add . 
git commit 

Ngay bây giờ, tôi cần những fileA một lần nữa. Tôi đã có ý tưởng rằng tôi có thể lấy lại, chỉ cần chuyển sang chi nhánh chính. Tôi rõ ràng là sai, vì tôi không thể tìm thấy tệp A.

Làm cách nào để lấy lại tệp tin với Git?

Trả lời

11

Trước tiên, bạn cần tìm nơi bạn có phiên bản mới nhất của fileA. Bạn có thể sử dụng "git log -p" hoặc "git whatchanged" để kiểm tra khi nó bị xóa hoặc bạn có thể sử dụng "git ls-files < revision > - fileA" để kiểm tra xem tệp có xuất hiện trong cam kết đã cho hay không '< sửa đổi >' có thể là chủ hoặc newFeature^ (newFeature^ nghĩa mẹ của newFeature).

Sau đó, bạn cần phải kiểm tra xem nó ra, hoặc là sử dụng

$ git checkout <revision> -- fileA 

hoặc chuyển hướng "git show" đầu ra

$ git show <revision>:fileA > fileA 

Đừng quên để thêm tập tin vào git (nếu cần)!

1
@titan:~$ cd /tmp/ 
@titan:/tmp$ mkdir x 
@titan:/tmp$ git init 
Initialized empty Git repository in /tmp/.git/ 
@titan:/tmp$ echo a > a 
@titan:/tmp$ git add a 
@titan:/tmp$ git ci -m a 
Created initial commit c835beb: a 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 a 
@titan:/tmp$ git rm a 
rm 'a' 
@titan:/tmp$ git ci -m b 
Created commit de97fae: b 
1 files changed, 0 insertions(+), 1 deletions(-) 
delete mode 100644 a 
@titan:/tmp$ git whatchanged 
commit de97fae7a72375ffa192643836ec8273ff6f762b 
Date: Wed Mar 11 17:35:57 2009 +0100 

    b 

:100644 000000 7898192... 0000000... D a 

commit c835beb7c0401ec27d00621dcdafd366d2cfdcbe 
Date: Wed Mar 11 17:35:51 2009 +0100 

    a 

:000000 100644 0000000... 7898192... A a 
@titan:/tmp$ git show 7898192 
a 
@titan:/tmp$ git show 7898192 > a 
@titan:/tmp$ 
3

Tạo một thẻ hoặc chi nhánh tại các cam kết trước khi bạn xóa fileA, check it out, sao chép fileA ở một nơi khác, sau đó kiểm tra các chi nhánh newFeature một lần nữa. Phần còn lại nên khá đơn giản.

+2

Bạn cũng có thể git checkout mà không cần tạo chi nhánh. –

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