บทที่ 9 ของPro Gitหนังสือมีส่วนในการลบวัตถุ
ให้ฉันสรุปขั้นตอนสั้น ๆ ที่นี่:
git filter-branch --index-filter \
'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
--tag-name-filter cat -- --all
เช่นเดียวกับตัวเลือก rebasing ที่อธิบายไว้ก่อนหน้าfilter-branchนี้คือการดำเนินการเขียนใหม่ หากคุณเคยเผยแพร่ประวัติคุณจะต้องส่ง--forceข้อมูลอ้างอิงใหม่
filter-branchวิธีการเป็นอย่างมากที่มีประสิทธิภาพมากขึ้นกว่าrebaseวิธีการเพราะมัน
- ช่วยให้คุณสามารถทำงานกับทุกสาขา / อ้างอิงในครั้งเดียว
- เปลี่ยนชื่อแท็กได้ทันที
- ทำงานได้อย่างหมดจดแม้ว่าจะมีการผสานรวมหลายครั้งตั้งแต่การเพิ่มไฟล์
- ทำงานได้อย่างหมดจดแม้ว่าไฟล์จะถูกเพิ่ม / ลบหลายครั้งในประวัติของ (a) branch (es)
- ไม่สร้างคอมมิตใหม่ที่ไม่เกี่ยวข้อง แต่จะคัดลอกในขณะที่แก้ไขทรีที่เกี่ยวข้อง ซึ่งหมายความว่าสิ่งต่างๆเช่นการเซ็นสัญญาคอมมิตบันทึก ฯลฯ จะถูกเก็บรักษาไว้
filter-branch สำรองข้อมูลไว้ด้วยดังนั้นขนาดของ repo จะไม่ลดลงทันทีเว้นแต่คุณจะหมดอายุ reflogs และการรวบรวมขยะ:
rm -Rf .git/refs/original # careful
git gc --aggressive --prune=now # danger