2012-02-16 28 views
32

Tôi vừa bắt đầu tìm hiểu cách sử dụng git hôm nay, tiến triển tốt.Tại sao git pull không mang lại các thư mục mà tôi đã xóa?

Là một thử nghiệm, tôi đã sử dụng push để tải lên hai thư mục (chứa hai tệp mỗi tệp) và hai tệp trong thư mục gốc. Điều này làm việc tốt.

Sau đó, tôi đã xóa một trong hai thư mục mà tôi có cục bộ (nhưng không xóa trên git). Khi tôi sử dụng git status nó có vẻ là ý thức điều này:

deleted: test/Testfile.as
deleted: test/Testile2.as

Nhưng khi tôi sử dụng git pull để có được tác phẩm của tôi trở lại, họ dường như không quay trở lại thư mục địa phương của tôi . Tôi cũng đã thử git fetch. Cách duy nhất tôi có thể lấy lại mọi thứ là git clone, nhưng điều đó có vẻ không hợp lý vì tôi cần xóa thư mục chính của mình cục bộ và sau đó sao chép lại nó (hoặc cách khác chỉ định vị trí mới cho tập tin nhân bản).

Cách thích hợp để truy xuất tệp và thư mục từ github đã bị xóa cục bộ là gì?

+1

Một khái niệm quan trọng bạn có thể thiếu là push và pull là về việc chuyển * cam * giữa kho từ xa và địa phương. Nếu bạn muốn đối phó với sự khác biệt giữa cây công việc của bạn và cam kết hiện đã được kiểm tra, đó là một hoạt động hoàn toàn cục bộ. – Cascabel

Trả lời

48

git pull chỉ kết hợp các cam kết lấy trong thư mục làm việc của bạn và sẽ không khôi phục thư mục bị xóa của bạn (nhưng có thể cảnh báo bạn về các cuộc xung đột.)

Nếu bạn đã xóa các thư mục trong thư mục làm việc của bạn, bạn phải làm:

git checkout -- test 

để lấy lại.

Hoặc bạn có thể làm git reset --hard để hoàn toàn mang thư mục làm việc của bạn đến trạng thái HEAD.

+0

Cảm ơn, điều này đã làm việc. Ở mặt sau của câu hỏi này, tại sao các thư mục trên git bị xóa khi tôi 'git push' sau khi xóa chúng cục bộ? – Marty

+0

@MartyWallace - bạn phải thực hiện lệnh 'git rm' và xóa đoạn, commit và push. – manojlds

3

git pull sẽ hợp nhất các thay đổi. nghĩ về nó như một tập tin bạn đã sửa đổi. một git kéo không thay thế các nội dung của tập tin với các điều khiển từ xa sao chép nếu bạn đã sửa đổi nó. ngay cả khi có sự thay đổi mâu thuẫn, thì nó chỉ cảnh báo bạn về một cách nhanh chóng.

Nếu bạn có kho lưu trữ của bạn trong tình trạng nơi delete là sự thay đổi không bị giam chỉ, và bạn muốn phục hồi lại nó, sau đó làm một git reset head --hard

Hoặc, nếu bạn có những thay đổi khác mà bạn muốn để lại tại chỗ, làm git checkout -- test

13

bạn muốn trả lại kho lưu trữ của mình về phiên bản hoạt động trước đó. đây là một công việc cho git-reset.

git reset --hard 

hãy chắc chắn để đọc qua này useful explanation of git-reset

bạn cũng có thể kiểm tra các tập tin nếu bạn muốn:

git checkout -- test/ 
-1

git reset --hard <commit hash> nghĩa ĐẦU sẽ được chỉ vào một đặc biệt cam kết và bất cứ cam kết bạn đã thực hiện sau khi băm cam kết đó sẽ không có sẵn. Lý do cho điều này là vì bạn đang chỉ HEAD để tách cam kết HASH. Nếu bạn đẩy mạnh thì bạn sẽ mất tất cả các cam kết.

Lưu ý: Hãy cẩn thận khi sử dụng lệnh git reset --hard trong git.

1

Ngoài git pullgit checkout, git revert cũng sẽ rất hữu ích để lấy lại các tập tin bị xóa

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