2012-03-10 29 views

Trả lời

8

Không có cách nào.

Thông thường, git rm kiểm tra các tệp đã được cam kết trước khi xóa chúng, vì vậy bạn không mất bất kỳ tác phẩm nào của mình. Tuy nhiên, việc sử dụng -f sẽ ghi đè kiểm tra này.

Nói tóm lại:

  • Không sử dụng -f.
  • Không chạm vào bất kỳ thứ gì bạn chưa cam kết.
+2

Cũng giống như unix - '-f' có nghĩa là bạn nên chắc chắn về những gì bạn đang làm. –

1

Không, theo như tôi biết. Tôi tin rằng git unlinks các tập tin, giống như làm rm -rf. Nó không quan trọng với nó cho dù nó biết về các tập tin hay không, nó sẽ sẵn sàng nuke thư mục. Thực sự, truy vấn duy nhất của bạn là cố gắng sử dụng công cụ khôi phục tệp như khi bạn được thực hiện rm -rf

0

Nếu git không theo dõi thư mục dirname, nó sẽ không cho phép bạn xóa thư mục với git rm -rf vì nó không biết về nó. Bạn sẽ (sẽ có) nhận được một lỗi như

fatal: pathspec 'dirname' did not match any files 

Chỉ cách bạn có thể đã bị xóa là nếu bạn đã làm một git add . hoặc git add dirname sau git init. Nếu đúng như vậy, các tệp của bạn đã biến mất và bạn không thể lấy lại chúng vì nó chưa bao giờ được cam kết và git không theo dõi nó. Nó là tốt như làm một rm -rf vào một thư mục bình thường (và không thể phục hồi trừ khi bạn đã sao lưu)

+0

Có phải không? Tôi đã không kiểm tra nó, nhưng tôi nghĩ lá cờ -f sẽ ngăn chặn lỗi đó. – Matt

+0

Trừ khi bạn sử dụng '-f'? Điều đó sẽ "Ghi đè lên kiểm tra cập nhật", bất kể điều đó có nghĩa là gì. –

+0

@Matt - Không, nó không ngăn chặn điều đó. '-f' trong' git rm' chỉ ghi đè lên kiểm tra cập nhật. – manojlds

0

git reset --hard giúp khi xóa đã không cam kết được nêu ra và, nói chung, xóa đã bị gián đoạn bởi Ctrl+Z

1

Cảnh báo: Chạy git prune mà không có tùy chọn -n (1) sẽ xóa dữ liệu không thể truy cập của bạn.

Có thể có cách, sử dụng git prunegit cat-file.

Chạy git prune -n danh sách di chúc mà các đối tượng sẽ được loại bỏ bằng cách tỉa:

$ git prune -n 
9cc84ea9b4d95453215d0c26489d6a78694e0bc6 blob 
c315143703752ef4d11ca7d93f2c324872b2ebff blob 

Mỗi dòng tương ứng với một tập tin đã xóa.

Bây giờ, sử dụng git cat-file, chúng tôi có thể khôi phục lại nội dung của tập tin gỡ bỏ vào một tập tin mới:

git cat-file -p 9cc84ea9b4d95453215d0c26489d6a78694e0bc6 > restored-filename.whatever 

(1) Từ git prune tài liệu:

TÊN
git-prune - Cắt giảm tất cả các đối tượng không thể truy cập từ cơ sở dữ liệu đối tượng

OPTIONS
-n
- chạy thử
Không xóa bất kỳ thứ gì; chỉ cần báo cáo những gì nó sẽ loại bỏ.

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