Git - đã xóa cục bộ một số tệp, làm cách nào để lấy chúng từ kho lưu trữ từ xa


109

Tôi đã xóa một số tệp trên PC của mình, làm cách nào để tải lại chúng xuống?

Pull nói: "Đã được cập nhật".


1
Bạn không phải "tải xuống lại chúng", vì tất cả lịch sử kho lưu trữ tồn tại cục bộ khi bạn đang sử dụng Git.
cdhowie

bạn có biết cách lấy chúng từ địa phương không?
Charlie Parker

Câu trả lời:


162

Vì git là một VCS phân tán, kho lưu trữ cục bộ của bạn chứa tất cả thông tin. Không cần tải xuống; bạn chỉ cần trích xuất nội dung bạn muốn từ repo trong tầm tay của bạn.

Nếu bạn chưa thực hiện hành động xóa, chỉ cần kiểm tra các tệp từ cam kết hiện tại của bạn:

git checkout HEAD <path>

Nếu bạn đã thực hiện việc xóa, bạn cần kiểm tra các tệp từ một cam kết có chúng. Có lẽ nó sẽ là cam kết trước đó:

git checkout HEAD^ <path>

nhưng nếu nó được ncam kết trước đó, hãy sử dụng HEAD~nhoặc đơn giản là kích hoạt gitk, hãy tìm SHA1 của cam kết thích hợp và dán nó vào.


2
chỉ như một nhận xét phụ, điều này cũng hoạt động cho một thư mục đầy đủ, nó không đặc biệt hoặc cụ thể cho một tệp duy nhất (nó hoạt động khi tôi đã thử ít nhất). Thnx btw.
Charlie Parker

5
NB <path>là bắt buộc, ngay cả khi chỉ .chấm cho dir hiện tại. Nhưng "chi nhánh" ( HEADtrong ví dụ trên) là tùy chọn. Như với rất nhiều lệnh Git, cả đầu ra và trợ giúp đều không hữu ích.
MarkHu

39

git checkout filename

git reset --hard cũng có thể làm thủ thuật


9
cảnh báo tho trong việc sử dụng git reset --hardphương pháp này vì điều đó sẽ hoàn nguyên toàn bộ cây trở lại vị trí mà bạn đặt HEAD / HEAD ^ / HEAD ~ n và nó sẽ làm điều đó gây thành kiến ​​và có khả năng mất rất nhiều cam kết ...
g19fanatic

git checkout filename là câu trả lời cho tôi :)
Ruub

git checkout filename chỉ tạo một tệp trống
mrek

được đặt trong thư mục mong muốn và đã git checkount .hoạt động như một sự quyến rũ!
hzitoun

21

Nếu bạn đã xóa nhiều tệp cục bộ nhưng không được cam kết, bạn có thể buộc thanh toán

$ git checkout -f HEAD

Như chúng ta thấy từ đầu ra "Đã được cập nhật", người hỏi câu hỏi này đã không vi phạm bất cứ điều gì gần đây. Bạn có nên chỉ định rằng git checkout -f HEAD là NGUY HIỂM không? Vì nó có thể hoàn tác các thay đổi cục bộ không được cam kết (khôi phục các tệp trước đó là kết quả tích cực, làm mất các thay đổi trên các tệp đã chỉnh sửa là kết quả tiêu cực).
Lionel Trebuchon

15

Nếu bạn đã xóa nhiều tệp cục bộ và không thực hiện các thay đổi, hãy truy cập đường dẫn kho lưu trữ cục bộ của bạn, mở git shell và nhập.

$ git checkout HEAD .

Tất cả các tệp đã xóa trước lần cam kết cuối cùng sẽ được phục hồi.

Đang thêm "." sẽ khôi phục tất cả các tệp đã xóa trong kho lưu trữ hiện tại, về đường dẫn tương ứng của chúng.

Để biết thêm chi tiết, hãy kiểm tra tài liệu .


2

Bạn cần kiểm tra phiên bản trước trước khi xóa tệp. Cố gắng git checkout HEAD^kiểm tra bản sửa đổi cuối cùng.


0

Ngoài ra, tôi thực hiện các bước sau để git repo sẽ được liên kết chính xác với IDE:

 $ git reset <commit #>

 $ git checkout <file/path>

Tôi hy vọng nó sẽ có ích!!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.