प्रो गिट पुस्तक के अध्याय 9 में वस्तुओं को हटाने पर एक अनुभाग है ।
मुझे यहाँ संक्षिप्त रूप से चरणों की रूपरेखा दें:
git filter-branch --index-filter \
'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \
--tag-name-filter cat -- --all
पहले बताए गए रिबासिंग विकल्प की तरह, filter-branchपुनर्लेखन ऑपरेशन है। यदि आपने इतिहास प्रकाशित किया है, तो आपको --forceनए रेफ को धकेलना होगा।
filter-branchदृष्टिकोण की तुलना में काफी अधिक शक्तिशाली है rebaseदृष्टिकोण है, यह बाद से
- आपको एक ही बार में सभी शाखाओं / रेफरी पर काम करने की अनुमति देता है,
- मक्खी पर किसी भी टैग का नाम बदल देता है
- अगर फ़ाइल के जोड़ के बाद से कई मर्ज किए गए हैं तो भी सफाई से काम करता है
- अगर (ए) शाखा (ईएस) के इतिहास में कई बार फ़ाइल को फिर से जोड़ा / हटाया गया तो भी सफाई से काम करता है
- नए, असंबंधित कमिट नहीं बनाता है, बल्कि उनसे जुड़े पेड़ों को संशोधित करते हुए उन्हें कॉपी करता है। इसका मतलब है कि हस्ताक्षरित कमिट, कमिट नोट आदि जैसे सामान संरक्षित हैं
filter-branch बैकअप भी रखता है, इसलिए जब तक आप रिफ्लेक्स और कचरा इकट्ठा नहीं करते, रेपो का आकार तुरंत कम नहीं होगा:
rm -Rf .git/refs/original # careful
git gc --aggressive --prune=now # danger