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-branch
là 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-branch
pháp này mạnh hơn đáng kể so với rebase
phươ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