คุณสามารถลบการขยายไบนารีและเก็บประวัติส่วนที่เหลือไว้ได้ Git ช่วยให้คุณสามารถเรียงลำดับใหม่และ 'สควอช' การคอมมิตก่อนหน้าได้ดังนั้นคุณสามารถรวมเฉพาะคอมมิตที่เพิ่มและลบไฟล์ไบนารีขนาดใหญ่ของคุณได้ หากการเพิ่มทั้งหมดเสร็จสิ้นในคอมมิตเดียวและการลบในอีกไฟล์หนึ่งจะง่ายกว่าการจัดการกับแต่ละไฟล์
$ git log --stat # list all commits and commit messages
ค้นหานี้กระทำที่เพิ่มและลบไฟล์ไบนารีของคุณและทราบ SHA1s ของพวกเขาพูดและ2bcdef
3cdef3
จากนั้นในการแก้ไขประวัติ repo ให้ใช้rebase -i
คำสั่งที่มีตัวเลือกแบบโต้ตอบเริ่มต้นด้วยพาเรนต์ของคอมมิตที่คุณเพิ่มไบนารีของคุณ มันจะเปิดตัว $ EDITOR ของคุณและคุณจะเห็นรายการคอมมิตโดยเริ่มจาก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
เป็นบรรทัดที่สองและลบบรรทัดที่ระบุว่าpick 3cdef3
ออกจากรายการ ตอนนี้คุณมีรายการของการดำเนินการสำหรับการโต้ตอบrebase
ซึ่งจะรวมการกระทำที่เพิ่มและลบไบนารีของคุณเข้าด้วยกันซึ่งความแตกต่างเป็นเพียงการเปลี่ยนแปลงอื่น ๆ จากนั้นจะใช้การกระทำที่ตามมาทั้งหมดอีกครั้งตามลำดับเมื่อคุณบอกให้เสร็จสิ้น:
$ git rebase --continue
ขั้นตอนนี้จะใช้เวลาหนึ่งหรือสองนาที
ตอนนี้คุณมี repo ที่ไม่มีไบนารีมาหรือไปอีกต่อไป แต่จะยังคงใช้พื้นที่เนื่องจากโดยค่าเริ่มต้น Git จะทำการเปลี่ยนแปลงประมาณ 30 วันก่อนที่จะสามารถรวบรวมขยะเพื่อให้คุณเปลี่ยนใจได้ หากคุณต้องการลบออกตอนนี้:
$ 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
ตอนนี้คุณได้ลบส่วนที่ขยายออกไปแล้ว แต่เก็บประวัติที่เหลือ