2010-06-30 13 views
40

Sử dụng Chris's answer trên một câu hỏi khác mà tôi có thể thêm một lịch sử ảnh chụp nhanh vào kho lưu trữ git của mình. Vì một trong các tệp không phải là một phần của lịch sử của tôi nhưng chỉ trong ảnh chụp nhanh, cam kết ban đầu đầu tiên hiện cũng chứa việc xóa tệp này. Làm thế nào tôi có thể hoàn tác điều đó?Làm cách nào để phục hồi một tệp đã bị xóa trước đây trong lịch sử của git?

Lúc đầu, tôi nghĩ điều này ngược lại với How do I remove sensitive files from git’s history, nhưng thực ra tôi không muốn chèn tệp vào lịch sử mà chỉ xóa tệp khỏi lịch sử.

+1

Git không theo dõi ý định, chỉ có nội dung. Nếu tệp tồn tại trong tổ tiên và bị xóa trong cam kết con, thì xóa "xóa bỏ khỏi lịch sử" và "chèn lại lịch sử vào" số tiền vào cùng một điều: đảm bảo tệp hiển thị ở trẻ và các con của nó . –

Trả lời

42

tôi đã nhận nó:

git tag originalHead # just in case 
git rebase -i <id of the parent of the commit that deleted the file> 
# change pick to edit for that commit 
git checkout <id of the previous commit> <filename> # thanks for reminding, kubi 
git commit --amend 
git rebase --continue 
git tag -d originalHead 

chỉnh sửa tiếc là điều này sẽ để lại tất cả các thẻ tại timeline cũ, xem here

+2

+1 Để trả lời một câu hỏi dường như không thể. Wow. – hobs

68
git checkout <commit> <filename> 
+9

cảm ơn, nhưng điều đó chỉ khôi phục nó. Tôi muốn lịch sử trông giống như tập tin không bao giờ bị xóa –