2011-11-13 31 views
5

Tôi đã đẩy kho lưu trữ cục bộ của mình vào GitHub. Trong quá trình cam kết mã của tôi, tôi quên tạo một tệp .gitignore. Kết quả là, tôi đã cam kết và sau đó đã đẩy một số thư mục và tệp mà tôi không muốn trên GitHub (hoặc trong kho lưu trữ cục bộ của tôi, cho vấn đề đó).Làm thế nào để áp dụng gitignore sau đó?

Tôi có thể áp dụng .gitignore ngay bây giờ để tôi có thể xóa một số thư mục và tệp không mong muốn sau này?

Trả lời

6

Bạn có thể git rm <unnecessary file and folder names> sau đó thêm chúng vào tập tin .gitignore của bạn, mà sẽ loại bỏ chúng khỏi rằng cam kết về phía trước. Vấn đề là họ sẽ vẫn còn trong lịch sử trừ khi bạn thay đổi các cam kết trước đó. Nếu không có dữ liệu nhạy cảm trong các tệp đó, tôi muốn nói rằng hãy để lịch sử như cũ. Nếu bạn cần xóa dữ liệu nhạy cảm khỏi lịch sử lưu trữ của mình, hãy xem GitHub's help article on the subject

2

Từ bộ nhớ, bạn phải xóa bộ nhớ và thêm lại. Git bỏ qua sau đó sẽ có hiệu lực.

Answered already?

2

Nếu đây là repo riêng của bạn và bạn đã không được công bố được chưa, sử dụng filter-branch để chỉnh sửa lịch sử:

git filter-branch --index-filter ' 
    git rm -r --cached --ignore-unmatched bin; 
' --all 

Sau đó, thêm/sửa .gitignore tập tin của bạn:

>> .gitignore echo bin 
git add .gitignore 
git commit -m 'add gitignore files' 

Vì bạn đã xuất bản istory, cách tốt nhất là không viết lại nó. Chỉ cần loại bỏ các thư mục bin và thêm một tập tin .gitignore

git rm -r bin 
# add .gitignore 
git commit -m 'remove and ignore bin folder' 
+0

là phương pháp tự động xóa tất cả các thư mục/tệp bằng gitignore? Tôi có thực sự phải thực thi các lệnh của bạn cho mỗi tệp/thư mục mà tôi muốn xóa không? – Rookian

+0

Bạn chỉ cần thực hiện 'git rm -r --cached --ignore-unmatched file1 folder1 file2 folder2 folder3 * bak test- *'. Chỉ cần chắc chắn rằng bạn hiểu được ý nghĩa của quá trình viết lại lịch sử, nếu bạn đi theo con đường 'lọc-chi nhánh'! – knittl

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