আপনি বাইনারি ব্লট সরিয়ে ফেলতে এবং আপনার বাকী ইতিহাসটি রাখতে পারেন। গিট আপনাকে পূর্ববর্তী কমিটগুলি পুনরায় অর্ডার করতে এবং 'স্কোয়াশ' করতে দেয়, যাতে আপনি কেবলমাত্র কমিটগুলি একত্রিত করতে পারেন যা আপনার বড় বাইনারি ফাইলগুলি যুক্ত করে এবং সরিয়ে দেয়। যদি যুক্তগুলি সমস্তই একটি প্রতিশ্রুতিতে করা হয় এবং অন্যটিতে অপসারণ করা হয়, তবে প্রতিটি ফাইলের সাথে ডিল করার চেয়ে এটি আরও সহজ হবে।
$ git log --stat # list all commits and commit messages
আপনার বাইনারি ফাইলগুলি যুক্ত এবং মুছতে এবং তাদের SHA1 নোট করুন, বলুন 2bcdef
এবং মন্তব্য করুন এর জন্য এটি অনুসন্ধান করুন 3cdef3
।
তারপরে রেপোর ইতিহাস সম্পাদনা করতে, rebase -i
আপনার বাইনারিগুলি যুক্ত করেছেন এমন প্রতিশ্রুতিবদ্ধতার পিতামাতার সাথে শুরু করে, এর ইন্টারঅ্যাকটিভ বিকল্পের সাথে কমান্ডটি ব্যবহার করুন । এটি আপনার $ সম্পাদনা চালু করবে এবং আপনি যে কমিটগুলি দিয়ে শুরু করছেন তা দেখতে পাবেন 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
এটি এক বা দুই মিনিট সময় নিতে হবে।
আপনার কাছে এখন একটি রেপো রয়েছে যা বাইনারিগুলি আর আসবে না। তবে তারা এখনও স্থান গ্রহণ করবে কারণ ডিফল্টরূপে, গিটগুলি আবর্জনা সংগ্রহের আগে 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
এখন আপনি ব্লোটটি সরিয়ে ফেলেছেন তবে আপনার বাকি ইতিহাসটি রেখেছেন।