2009-12-31 55 views
115

Trước hết, tôi mới sử dụng Git.Xóa tệp bằng Git/GitHub

Tôi đã xóa một loạt tệp cục bộ trên máy Mac bằng Trình tìm kiếm. Tôi muốn các tập tin mà tôi đã xóa không còn hiển thị trong nhánh hiện tại, nhưng chúng lại làm.

Bất kỳ người dùng Git nào đều biết lệnh để cập nhật chỉ mục?

+0

Xem thêm http://stackoverflow.com/questions/492558/removing-multiple-files-from-a-git-repo-that-have-already-been -deleted-from-disk –

Trả lời

224

tôi nghĩ rằng đây sẽ là một cách đơn giản hơn để làm những gì bạn muốn:

git add . -A 

Sau đó, bạn sẽ chỉ làm:

git commit -m "removed some files" 

Như đã lưu ý ở trên.

+0

Cảm ơn bạn. Và tôi vừa viết bí danh trong 'bash' để làm điều trên. Tuyệt vời. – Zack

+0

Nếu bạn đã thêm một tập tin trong cùng một "giai đoạn" git sẽ giả định một tên. Bất cứ điều gì để làm về điều đó hoặc bạn nên cam kết những người riêng biệt? – Koen

+12

Lá cờ -A làm gì? –

17

Bạn có thể thấy tập tin đã xóa, mà vẫn 'theo dõi' với:

git ls-files --deleted 

Để xóa các tập tin từ một chi nhánh, bạn có thể làm một cái gì đó như thế này:

git ls-files --deleted -z | xargs -0 git rm 

Từ man git-rm:

Xóa tệp khỏi chỉ mục hoặc từ cây đang hoạt động và chỉ mục. git-rm sẽ không xóa tệp khỏi thư mục làm việc của bạn. (Không có tùy chọn để loại bỏ một tập tin 13 chỉ từ cây công việc nhưng giữ nó trong chỉ mục;. Sử dụng/bin/rm nếu bạn muốn làm điều đó)

Cuối cùng, để cam kết "loại bỏ "làm cái gì đó như:

git commit -m "removed some files" 
+0

Cảm ơn bạn, điều gì tiếp theo? – Zack

+0

Sau đó, bạn cần cam kết thay đổi - 'git commit -m' đã xóa một số tệp "' –

+0

có, tất nhiên, cảm ơn bạn - – miku

17

Tôi không biết nếu điều này đã được thêm vào git kể từ khi câu trả lời trước, nhưng tôi chỉ sử dụng

git add -u 
git commit -m "Removed some files" 

để đạt được điều tương tự.

+0

Điều này làm việc cho trường hợp sử dụng được liệt kê, nhưng điều này không chỉ thêm việc xóa các tệp. Nó thêm tất cả các tệp đã bị thay đổi theo bất kỳ cách nào, vì vậy đây không phải là cách tốt để xóa tất cả các tệp đã xóa trừ khi đó là những thay đổi duy nhất bạn đã thực hiện. – Alex

2
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch deletefile.name' --prune-empty --tag-name-filter cat -- --all 
git commit -m "Removed deletefile.name" 
git push origin master --force 

Thay thế deletefile.name bằng tệp cần xóa. Để có giải thích chi tiết chuyên sâu, hãy xem qua bài viết đẹp https://help.github.com/articles/remove-sensitive-data