Saya telah berkomitmen dengan id 56f06019 (misalnya). Dalam komit itu saya secara tidak sengaja melakukan file besar (50Mb). Di komit lain saya menambahkan file yang sama tetapi dalam ukuran yang tepat (kecil). Sekarang repo saya ketika saya mengkloning terlalu berat :( Bagaimana cara menghapus file besar itu dari riwayat repo untuk mengurangi ukuran repo saya?
113
Jawaban:
Bab 9 dari buku Pro Git memiliki bagian tentang Menghapus Objek .
Izinkan saya menjelaskan langkah-langkahnya secara singkat di sini:
Seperti opsi rebasing yang dijelaskan sebelumnya,
filter-branch
adalah operasi penulisan ulang. Jika Anda telah menerbitkan sejarah, Anda harus--force
mendorong ref baru.The
filter-branch
Pendekatan jauh lebih kuat daripadarebase
pendekatan, karenafilter-branch
menyimpan cadangan juga, sehingga ukuran repo tidak akan langsung berkurang kecuali Anda mengakhiri reflog dan pengumpulan sampah:sumber
git filter-branch --force --index-filter 'git rm --ignore-unmatch --cached PathTo/MyFile/ToRemove.dll' -- fbf28b005^..
Kemudianrm --recursive --force .git/refs/original
danrm --recursive --force .git/logs
Kemudian saya menggunakangit prune --expire now
dangit gc --aggressive
Ini bekerja lebih baik untuk saya daripada langkah-langkah tepat Anda yang tercantum di atas. Terima kasih telah menyertakan tautan ke buku Git Pro karena sangat berharga.Anda dapat menggunakan alat git-extras . The melenyapkan perintah benar-benar menghapus file dari repositori, termasuk komit masa lalu dan tag.
https://github.com/tj/git-extras/blob/master/Commands.md
sumber
Anda perlu melakukan git rebase dalam mode interaktif, lihat contoh di sini: Bagaimana cara menghapus komit di GitHub? dan cara menghapus komit lama .
Jika komit Anda ada di HEAD dikurangi 10 komit:
Setelah edisi riwayat Anda, Anda perlu mendorong riwayat "baru", Anda perlu menambahkan
+
ke gaya (lihat referensi dalam opsi dorong ):Jika orang lain telah mengkloning repositori Anda, Anda harus memberi tahu mereka, karena Anda baru saja mengubah histori.
sumber
git push --force
ataugit push -f
(yang tidak mengharuskan orang untuk mengetahui target dorong cabang)git rm
di jalan.Saya mencoba menggunakan jawaban berikut di windows https://stackoverflow.com/a/8741530/8461756
Kutipan tunggal tidak berfungsi di windows, Anda perlu tanda kutip ganda.
Mengikuti berhasil untuk saya.
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch PathRelativeRepositoryRoot / bigfile.csv" - --all
Setelah menghapus file besar, saya dapat memasukkan perubahan saya ke master github.
sumber
Anda dapat menggunakan Perintah sederhana untuk menghapus
sumber