आप के
$ git lola --name-status
* e709131 (HEAD, master) bar
| A bar
* 61493ac ABC/file - 3.ext
| A ABC/file - 3.ext
* 34cce9e ABC/file - 2.ext
| A ABC/file - 2.ext
* 115e6d5 ABC/file - 1.ext
| A ABC/file - 1.ext
* 5ea5b42 foo
A foo
नोट एक इतिहास के साथ शुरू करते हैं कहते हैं: git lola एक गैर मानक लेकिन अत्यधिक उपयोगी उर्फ है।
git rm
subtrees को दूर करने के लिए एक विकल्प का समर्थन करता है।
-r
पुनरावर्ती निकलने दें जब एक प्रमुख निर्देशिका का नाम दिया जाता है।
$ git filter-branch --index-filter 'git rm --cached -r --ignore-unmatch ABC' \
--prune-empty --tag-name-filter cat -- --all
चल आप उत्पादन है कि जैसा दिखता है
Rewrite 115e6d5cd06565ca08f1e5c98c4b91246cf59fa1 (2/5)rm 'ABC/file - 1.ext'
Rewrite 34cce9e90f832460137e620ebacc8a73a99e64ce (3/5)rm 'ABC/file - 1.ext'
rm 'ABC/file - 2.ext'
Rewrite 61493ac3211808f34f616dbc33d51d193b3f45a3 (4/5)rm 'ABC/file - 1.ext'
rm 'ABC/file - 2.ext'
rm 'ABC/file - 3.ext'
Rewrite e709131f1fe6103adf37616c9fa500994aeb30d0 (5/5)rm 'ABC/file - 1.ext'
rm 'ABC/file - 2.ext'
rm 'ABC/file - 3.ext'
Ref 'refs/heads/master' was rewritten
आप परिणाम से खुश हैं तो देखेंगे के बाद,
$ git update-ref -d refs/original/refs/heads/master
और अब के साथ पुराने मास्टर हटाना आप
012,351 का इतिहास है
$ git lola --name-status
* 19680d4 (HEAD, master) bar
| A bar
* 5ea5b42 foo
A foo
अपने दूसरे प्रश्न का उत्तर देने के लिए, आप केवल ABC/file - 2.ext
को हटाना चाहते हैं। याद रखें कि आप के हवाले से की दो परतों की आवश्यकता होगी: कि आदेश के लिए एक बहस में रिक्त स्थान से बचने के लिए पूरे आदेश के लिए एक परत और एक अन्य, फ़ाइल का नाम हटाने के लिए।
एक तरीका यह है कि ऐसा करने के लिए
$ git filter-branch --index-filter \
'git rm --cached --ignore-unmatch "ABC/file - 2.ext"' --prune-empty \
--tag-name-filter cat -- --all
नोट सिंगल कोट्स के अंदर दोहरे उद्धरण चिह्नों है।
आप इस आदेश के बजाय समाप्त हो चुकी थी, तो अपने इतिहास
$ git lola
* a8d1b0d (HEAD, master) bar
* cff0c4e ABC/file - 3.ext
* 115e6d5 ABC/file - 1.ext
* 5ea5b42 foo
बन गए होते क्यों आप उन सभी को प्रतिबद्ध से हटाना चाहते हैं? प्रतिबद्धताएं आपकी परियोजना के स्नैपशॉट हैं। जब आप कुछ डीआईआर या फाइलों को हटाना चाहते हैं तो आपको एक नई प्रतिबद्धता बनाना चाहिए जो उन्हें आपकी परियोजना से हटा देता है। –
@WouterJ कभी-कभी आप भंडार के इतिहास से बेकार, बड़ी फ़ाइलों को हटाना चाहते हैं, या शायद संवेदनशील जानकारी वाले फ़ाइलों को हटा सकते हैं। –