İkili şişkinliği kaldırabilir ve geçmişinizin geri kalanını saklayabilirsiniz. Git, önceden kaydetme işlemlerini yeniden sıralamanıza ve 'ezmenize' izin verir, böylece yalnızca büyük ikili dosyalarınızı ekleyen ve kaldıran işlemleri birleştirebilirsiniz. Eklemelerin tümü bir işlemede ve kaldırmalar başka bir işlemde yapıldıysa, bu her dosya ile uğraşmaktan çok daha kolay olacaktır.
$ git log --stat # list all commits and commit messages
İkili dosyalarınızı ekleyen ve silen commit'leri arayın ve SHA1'lerini not edin, örneğin 2bcdef
ve 3cdef3
.
Ardından deponun geçmişini düzenlemek için rebase -i
, ikili dosyalarınızı eklediğiniz commit'in üst öğesinden başlayarak etkileşimli seçeneği ile command kullanın . $ EDITOR'unuzu başlatacak ve şunlardan başlayarak bir işlem listesi göreceksiniz 2bcdef
:
$ git rebase -i 2bcdef^ # generate a pick list of all commits starting with 2bcdef
# Rebasing zzzzzz onto yyyyyyy
#
# Commands:
# pick = use commit
# edit = use commit, but stop for amending
# squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
pick 2bcdef Add binary files and other edits
pick xxxxxx Another change
.
.
pick 3cdef3 Remove binary files; link to them as external resources
.
.
squash 3cdef3
İkinci satır olarak ekleyin ve yazan satırı pick 3cdef3
listeden kaldırın . Artık etkileşimli için, rebase
ikili dosyalarınızı ekleyen ve silen commit'leri, farkları sadece bu kayıtlardaki diğer değişiklikler olan bir kayıtta birleştirecek bir eylemler listesine sahipsiniz . Ardından, tamamlamasını söylediğinizde sonraki tüm taahhütleri sırayla yeniden uygulayacaktır:
$ git rebase --continue
Bu bir veya iki dakika sürer.
Artık ikili dosyaların gelip gitmediği bir deponuz var. Ancak yine de yer kaplayacaklar çünkü varsayılan olarak Git değişiklikleri çöp olarak toplanmadan önce 30 gün boyunca saklar, böylece fikrinizi değiştirebilirsiniz. Onları şimdi kaldırmak istiyorsanız:
$ git reflog expire --expire=1.minute refs/heads/master
#all deletions up to 1 minute ago available to be garbage-collected
$ git fsck --unreachable # lists all the blobs(files) that will be garbage-collected
$ git prune
$ git gc
Şimdi şişkinliği kaldırdınız ama geçmişinizin geri kalanını sakladınız.