Chương 9 của sách Pro Git có phần Xoá Đối tượng .
Hãy để tôi phác thảo các bước ngắn gọn ở đây:
git filter-branch --index-filter \
'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
--tag-name-filter cat -- --all
Giống như tùy chọn khôi phục được mô tả trước đây, filter-branchlà hoạt động viết lại. Nếu bạn đã xuất bản lịch sử, bạn sẽ phải --forceđẩy giới thiệu mới.
Phương filter-branchpháp này mạnh hơn đáng kể so với rebasephương pháp này, vì nó
- cho phép bạn làm việc trên tất cả các chi nhánh / giới thiệu cùng một lúc,
- đổi tên bất kỳ thẻ nào một cách nhanh chóng
- hoạt động rõ ràng ngay cả khi đã có một số cam kết hợp nhất kể từ khi thêm tệp
- hoạt động rõ ràng ngay cả khi tệp được (lại) thêm / xóa nhiều lần trong lịch sử của (a) chi nhánh
- không tạo các cam kết mới, không liên quan, mà sao chép chúng trong khi sửa đổi các cây được liên kết với chúng. Điều này có nghĩa là những thứ như cam kết đã ký, ghi chú cam kết, v.v. được giữ nguyên
filter-branch giữ các bản sao lưu, vì vậy kích thước của repo sẽ không giảm ngay lập tức trừ khi bạn hết hạn các bản ghi lại và thu thập rác:
rm -Rf .git/refs/original # careful
git gc --aggressive --prune=now # danger