2013-06-01 47 views
33

Sử dụng git cho một dự án, tôi vô tình thêm vào cam kết tệp lớn .zip. Tôi đã không nhận thấy cho đến khi tôi bắt đầu tải nó lên github. Khi tôi nhận thấy, tôi nhấn ctrl-c, git remove, git commit và tải lên lại (bây giờ với tệp không được tải xuống).Xóa hoàn toàn tệp khỏi toàn bộ kho git

Tôi biết rằng đây không phải là lựa chọn đúng để làm, bởi vì một khi tôi cam kết .zip, nó vẫn ở trong repo cho đến khi tôi hoàn nguyên cam kết, nhưng thật đáng buồn là tôi không làm vậy.

Bây giờ, khi ai đó cố gắng tải xuống từ repo, phải mất rất nhiều thời gian để làm điều đó, đôi khi mang lại git the remote end hung up unexpectedly (mà tôi đã đọc có thể được giải quyết bằng cách thực hiện một số git config) và rất khó chịu.

Điểm của tôi là: có cách nào để yêu cầu kéo/lấy thêm yêu cầu quên tệp cụ thể này trong phiên bản cam kết cụ thể này không?

+2

thể trùng lặp của [Tháo gỡ hoàn toàn tập từ tất cả lịch sử cam kết của kho lưu trữ Git] (http://stackoverflow.com/questions/307828/completely-remove-file-from-all-git-repository-commit-history) –

+1

@Cupcake Cảm ơn bạn đã đứng đầu :) Bạn có thể thấy nó thậm chí là một phần của câu trả lời. Các câu hỏi không giống hệt nhau, chưa kể IMHO, câu trả lời __this là tốt hơn rất nhiều, với tài liệu tốt hơn và các liên kết hữu ích hơn tất cả được cung cấp trong bản sao đó. Ngoài ra, sự giúp đỡ của bạn sẽ rất hữu ích _1 năm trước_;) –

Trả lời

60

Github cung cấp như thế này. Ngoài ra còn có các câu hỏi khác trên StackOverflow trong đó bao gồm này

Xem thêm this section of the Pro Git book, một ví dụ cho có:

Để loại bỏ một file có tên Passwords.txt từ toàn bộ lịch sử của mình, bạn có thể sử dụng tùy chọn --tree-filter cho chi nhánh lọc:

$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD 
Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21) 
Ref 'refs/heads/master' was rewritten 

Sau khi dọn dẹp, bạn cũng có thể thử một git gc để tiếp tục nén và dọn dẹp cho kho.

+0

Wow, không biết về 'git gc'. Thư mục chấm git của tôi chỉ co lại từ 35M đến 20M. – mojuba

+0

sau này làm thế nào tôi có thể cam kết? @Paul Dixon – Alper

+0

FWIW, liên kết đầu tiên (đến trang GitHub) dường như là tốt nhất đối với tôi bằng một ảnh dài (nó sử dụng bộ lọc '-index 'nhanh hơn đáng kể; lệnh của nó ảnh hưởng đến tất cả các nhánh và thẻ (như câu hỏi)); nó cung cấp các cảnh báo có liên quan và nó mô tả các bước trước và sau rất hữu ích). –