Cảnh báo: không sử dụng lệnh sau trừ khi bạn muốn mất công việc không được cam kết!
Việc sử dụng git reset
đã được giải thích, nhưng bạn cũng đã yêu cầu một lời giải thích về các lệnh đường ống, vì vậy ở đây đi:
git ls-files -z | xargs -0 rm -f
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
Lệnh git ls-files
liệt kê tất cả các tập tin git biết về. Tùy chọn -z
áp đặt một định dạng cụ thể cho chúng, định dạng được mong đợi xargs -0
, sau đó gọi rm -f
chúng, có nghĩa là loại bỏ chúng mà không cần kiểm tra sự chấp thuận của bạn.
Nói cách khác, "liệt kê tất cả các tệp git biết và xóa bản sao cục bộ của bạn".
Sau đó, chúng tôi nhận được git diff
, cho thấy những thay đổi giữa các phiên bản khác nhau của vật phẩm mà git biết. Đó có thể là những thay đổi giữa các cây khác nhau, sự khác biệt giữa các bản sao địa phương và bản sao từ xa, v.v.
Như được sử dụng ở đây, nó cho thấy những thay đổi chưa được thực hiện; các tập tin bạn đã thay đổi nhưng chưa cam kết. Tùy chọn này --name-only
có nghĩa là bạn chỉ muốn tên tệp (đầy đủ) và --diff-filter=D
có nghĩa là bạn chỉ quan tâm đến các tệp bị xóa. (Này, không phải chúng ta đã xóa một loạt các thứ sao?)
Cái này sau đó được dẫn vào cái xargs -0
mà chúng ta đã thấy trước đó, nó gọi git rm --cached
chúng, có nghĩa là chúng bị xóa khỏi bộ đệm, trong khi cây làm việc nên được để yên - ngoại trừ việc bạn vừa xóa tất cả các tệp khỏi cây làm việc của bạn. Bây giờ họ cũng bị xóa khỏi chỉ mục của bạn.
Nói cách khác, tất cả các thay đổi, dàn dựng hoặc không được dàn dựng đều biến mất và cây làm việc của bạn trống rỗng. Hãy khóc, kiểm tra các tập tin của bạn mới từ nguồn gốc hoặc từ xa, và làm lại công việc của bạn. Nguyền rủa kẻ tàn bạo đã viết những dòng vô sinh này; Tôi không có manh mối nào tại sao mọi người muốn làm điều này.
TL; DR: bạn vừa hos mọi thứ; bắt đầu lại và sử dụng git reset
từ bây giờ
rm -f
không phải là lệnh git và không có--cached
tùy chọn. Các tệp cục bộ của bạn đã bị xóa trước khi bạn thực thigit rm
vì vậy tôi không nghĩ rằng bạn có thể đổ lỗi một cách hợp phápgit rm
cho bất cứ điều gì.