2012-03-17 71 views
16

giả sử hôm qua tôi đã thực hiện một số thay đổi trên nhánh chính của mình và tôi quên thêm, cam kết chúng. và vào buổi sáng tôi đã làmVẫn có thể khôi phục các tệp đã bị xóa không được theo dõi trong git?

git reset --hard 

có thể khôi phục các tệp đã xóa trong tình huống này không?

+1

Nếu bạn xảy ra cho 'git add' những tập tin này tại một số điểm, ngay cả khi bạn không bao giờ cam kết, họ sẽ vẫn được treo xung quanh như blobs cho đến khi họ thu gom rác thải (trong khoảng hai tuần) . 'git fsck' sẽ liệt kê các đối tượng là [dangling hoặc unreachable] (https://stackoverflow.com/a/36671659/712526). Sau đó, bạn có thể sử dụng 'git cat-file -p deadbeef> tên tệp cũ' để khôi phục chúng. – jpaugh

+0

([Câu trả lời của Pod] (https://stackoverflow.com/a/45815093/712526) đã bao gồm điều này, rất tiếc!) – jpaugh

+0

Có thể trùng lặp: https://stackoverflow.com/q/25791533/712526 – jpaugh

Trả lời

42

Một số IDE tốt hơn theo dõi các tệp của bạn dưới dạng lịch sử cục bộ. Nếu bạn đã xóa các tệp bên ngoài (ví dụ: git reset), bạn sẽ có thể nhấp vào IDE của mình trên thư mục mẹ và chọn "So sánh với lịch sử cục bộ".

tôi đã sử dụng tính năng này thành công trong PHPStorm IDE khi file untracked của tôi đã bị xóa sổ bởi một số tiện ích ...

+4

Đối với Eclipse, điều hướng vào thư mục/gói mà tệp đang ở trong (khung nhìn Project Explorer hoặc khung nhìn Package Explorer), nhấn chuột phải và chọn 'Restore from Local History ...' từ trình đơn ngữ cảnh. –

+2

omg ... Bạn đã cứu mạng tôi. Tôi đã sử dụng 'git reset --hard' trong một dự án cam kết không, có nghĩa là' git fsck --lost-found' không hoạt động. May mắn là tôi đọc câu trả lời của bạn và sử dụng 'hoàn nguyên lịch sử' trong WebStorm và đã nhận được mã đã xóa ... –

+2

Luôn vui mừng khi nghe câu trả lời của tôi đóng góp cho" kết thúc hạnh phúc ":) –

11

Không ................... Không phải.

4

git reset --hard là một lệnh rất nguy hiểm, vì vậy hãy cẩn thận khi bạn sử dụng nó lần sau :)

Nếu bạn không có bất kỳ cam kết đối với những tác phẩm, có vẻ như bạn không có cơ hội khôi phục chúng.

Nếu không, lệnh reflog có thể giúp bạn.

1

Bạn không thể truy cập vào phiên bản trước của tập tin đã xóa untracked từ git, bởi vì, trong coruse, họ không tồn tại. Tôi sẽ phục hồi chúng từ một số sao lưu (có thể có các tập tin sao lưu ẩn còn lại bởi ide/editor?), Hoặc, thay vào đó, tôi sẽ tránh làm việc trên hệ thống tập tin đó quá nhiều và bắt đầu tìm kiếm các công cụ phục hồi.

+1

Cuộc gọi tốt trên trình chỉnh sửa! Tôi đã loại bỏ các thay đổi không được theo dõi từ một tập tin một cách tình cờ (nguyền rủa ứng dụng Github) nhưng nhận ra rằng tôi vẫn mở tập tin trong Atom và có thể chỉ cần nhấn "hoàn tác" để lấy lại các thay đổi của tôi. – henrebotha

+0

@henrebotha, hi! điều này chỉ xảy ra với tôi, nhưng tiếc là tôi đã không có nguyên tử của tôi mở tại điểm git cứng đặt lại, bạn có biết cách nào có thể tôi có thể được cứu. Rất ngu ngốc tôi đã có rất nhiều thứ trong các tập tin không được theo dõi của tôi. –

+0

@ gdad-s-river Bạn vẫn có thể mở Atom sau khi thực tế và nhấn 'undo', miễn là bạn đã chỉnh sửa tệp trong Atom tại một thời điểm nào đó. – henrebotha

1

git reset --hard sẽ không xóa các tệp không được theo dõi. Tuy nhiên, git clean sẽ.

Tuy nhiên nếu bạn git add các tập tin, không git commit họ và sau đó chạy git reset --hard những file sẽ bị mất.

Nhưng không sao, vì chúng có thể được khôi phục, như được hiển thị trong this answer. (Vâng, cho đến khi git gc tiếp theo).

2

(Note:.. Các bước dường như đã thay đổi một chút, vì câu trả lời chấp nhận đã được đăng Nhưng ý tưởng vẫn giữ nguyên)

Để thêm vào các câu trả lời được chấp nhận, tôi đã có thể khôi phục các tệp đã xóa của tôi bằng Webstorm 2016.

  1. Trước tiên, tôi bị mất tệp khi sử dụng git git clean -f.
  2. Để khôi phục nó, tôi đã đi trong Webstorm và đã làm các bước sau:

    • Đến tab cho dự án của bạn dự án, nhấn chuột phải để có được 'Hiển thị Lịch sử' dưới 'Lịch sử địa phương'. (As shown in this picture.)

    • Khi 'Lịch sử hiển thị' được nhấp, người ta có thể thấy cửa sổ bật lên với 'Thay đổi bên ngoài -> Hoàn nguyên' trong đó. Nhấp để hoàn nguyên các tệp mong muốn ở bên phải.(As shown in the attached picture.)

    • Sau 2 bước trên, bạn sẽ thấy tệp của mình quay lại trong tab 'Project'. Cửa sổ bật lên 'Lịch sử cục bộ' sẽ hiển thị một cái gì đó giống như trong hình ảnh đính kèm này. Reverted to External Change Bạn sẽ nhận được tùy chọn để thêm nó vào Git.

    • Để không làm điều đó, chỉ cần thực hiện git reset HEAD <filename> từ dòng lệnh.

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