2011-03-16 13 views
72

का उपयोग करके खाली परिवर्तन के साथ निष्कासन हटाएं 10 मैं गिट फ़िल्टर-शाखा का उपयोग करके कोई बदलाव नहीं कर सकता हूं?गिट - फ़िल्टर-शाखा

मैं उपयोग करते हुए मेरे Git इतिहास दुबारा लिखा:

git filter-branch --tree-filter 'rm -r -f my_folder' -f HEAD 

यह अच्छी तरह से बाहर काम किया लेकिन अब मैं खाली changesets साथ प्रतिबद्ध के बहुत सारे है। मैं उन चीजों को हटाना चाहता हूं। अधिमानतः msysgit में।

रीबेजिंग वास्तव में एक विकल्प नहीं है क्योंकि मेरे पास 4000 से अधिक काम हैं और उनमें से आधे को हटा दिया जाना चाहिए।

+4

भविष्य के आगंतुकों के लिए, 'git rm -r --ignore-unmatch --cached my_folder' के साथ' --index-filter' '--ree-filter' से बहुत तेज है क्योंकि इसे जांचना नहीं है प्रत्येक संशोधन। यह पूरी तरह से सूचकांक पर काम करता है। – vmrob

+3

और यदि आपने पहले से ही काम किया है ('--tree-filter ...') और अब केवल खाली खाली कामों से छुटकारा पाना चाहते हैं, तो यह मेरे बेकन को बचाया: 'git filter-branch --prune-blank' (केवल 'फिल्टर-शाखा' कमांड * बिना * किसी भी 'फ़िल्टर' के) - जैसा कि http://stackoverflow.com/questions/28313664/remove-empty-commits-in-git#28313729 में पाया गया है - यह उपयोगी है जब जेफ्रोमी का जवाब नीचे दिया गया है (http://stackoverflow.com/questions/5324799/git-remove-commits-with-empty-changeset-using-filter-branch#5326065) त्रुटि रिपोर्ट ' –

उत्तर

65

बस --prune-empty विकल्प पर जोड़ें:

git filter-branch --tree-filter 'rm -rf my_folder' --prune-empty -f HEAD 

(और निश्चित रूप से, अगर आप अन्य refs, आप के साथ HEAD के बजाय सबकुछ फिर से लिखना चाहेंगे।)

ध्यान दें कि यह isn --commit-filter के साथ संगत नहीं है; उस स्थिति में, Charles Bailey has your answer

46

बस filter-branch के लिए एक प्रलेखन की तलाश में, यदि आप ऐसा करने में सक्षम होना चाहिए:

git filter-branch --commit-filter 'git_commit_non_empty_tree "[email protected]"' HEAD 
+0

को फिर से लिखने के लिए कुछ नहीं मिला' यह काम करता है अगर मैं इसके लिए -एफ ध्वज –

+4

+1 का उपयोग करता हूं। यदि आपने एक svn रिपॉजिटरी को परिवर्तित किया है, तो बहुत उपयोगी है, जो आमतौर पर बहुत खाली खाली बनाता है – Fabio

+0

यह आदेश मेरे मामले में सभी खाली काम नहीं करता है लेकिन दुर्भाग्य से मुझे नहीं पता कि क्यों। कोई अन्य विचार? –