Bab 9 dari buku Pro Git memiliki bagian tentang Menghapus Objek .
Izinkan saya menjelaskan langkah-langkahnya secara singkat di sini:
git filter-branch --index-filter \
'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
--tag-name-filter cat -- --all
Seperti opsi rebasing yang dijelaskan sebelumnya, filter-branchadalah operasi penulisan ulang. Jika Anda telah menerbitkan sejarah, Anda harus --forcemendorong ref baru.
The filter-branchPendekatan jauh lebih kuat daripada rebasependekatan, karena
- memungkinkan Anda untuk bekerja di semua cabang / referensi sekaligus,
- mengganti nama tag apa pun dengan cepat
- beroperasi dengan bersih bahkan jika ada beberapa komit penggabungan sejak penambahan file
- beroperasi dengan bersih bahkan jika file itu (kembali) ditambahkan / dihapus beberapa kali dalam sejarah (a) branch (es)
- tidak membuat komit baru yang tidak terkait, melainkan menyalinnya saat memodifikasi struktur yang terkait dengannya. Ini berarti bahwa hal-hal seperti komit yang ditandatangani, catatan komit, dll. Dipertahankan
filter-branch menyimpan cadangan juga, sehingga ukuran repo tidak akan langsung berkurang kecuali Anda mengakhiri reflog dan pengumpulan sampah:
rm -Rf .git/refs/original # careful
git gc --aggressive --prune=now # danger