Git repo से फ़ाइल को हटाने में विफल, नया बैकअप बनाने में असमर्थ


116

मैंने अपने रिमोट रेपो से एक फ़ाइल को चलाने की कोशिश की:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

लेकिन Git की शिकायत है कि

नया बैकअप नहीं बनाया जा सकता। एक पिछला बैकअप पहले से ही refs / original /
Force में मौजूद है जो कि -f
rm के साथ बैकअप को ओवरराइट कर रहा है: / / -It-rewrite /backup-refs को नहीं हटा सकता है: अनुमति से इनकार
rm: निर्देशिका /.It-rewrite को नहीं हटा सकता: निर्देशिका खाली नहीं है

यह तब था जब मैंने विंडोज पर .git-rewrite डायरेक्टरी को पहले ही डिलीट कर दिया था।

मैं उस फ़ाइल को कैसे निकाल सकता हूँ? यह एक 29Mb फाइल है जो मेरे रेपो पर बैठी है, इसलिए मुझे फाइल निकालने की काफी जरूरत है।

मैंने कमिट को हटाने की कोशिश की git rebase -i, लेकिन जाहिर तौर पर क्योंकि कमेटी ने बहुत सारी अलग-अलग फाइलों को छुआ, जीआईटी ने संघर्षों की शिकायत की और मैंने सुरक्षित रहने के लिए गर्भपात कर दिया।


1
खोज इंजन के लिए: यह तब भी लागू हो सकता है जब आपका त्रुटि संदेश है .git-rewrite already exists, please remove it
ड्रू नोकें

जवाबों:


219

आपने पहले ही एक फ़िल्टर-शाखा ऑपरेशन किया है। फ़िल्टर-ब्रांच के बाद, Git पुराने कमिट्स के आसपास refs रखता है, अगर कुछ गलत हो जाता है।

आप उन में पा सकते हैं .git/refs/original/…। या तो उस निर्देशिका और सभी फ़ाइलों -fको हटाएं, या पुराने संदर्भों को हटाने के लिए Git को बाध्य करने के लिए ध्वज का उपयोग करें ।

git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

10
अंत में यह काम करने के लिए मिला, धन्यवाद! मैंने -f ध्वज की कोशिश की, लेकिन समस्या यह थी कि मैं इसे कमांड के अंत में रख रहा था उदा। हेड -फ। आपकी आज्ञा को देखते हुए मैंने शुरुआत में झंडा लगाने की कोशिश की, और यह काम कर गया! = डी
कार्डिन

12
विकल्प झंडे ( -f) रेफरी से पहले जाएं ( HEAD)। refs अंतिम चलते हैं
knittl

निर्देशिका को जोड़ने-हटाने और हटाने के बाद भी मुझे वही त्रुटि मिल रही है। कोई विचार?
यारोन

1
@knittl, मैं इसका जिक्र नहीं कर रहा था git add। मुझे .git/refs/original/फ़ोल्डर को हटाने और कमांड -fमें ध्वज का उपयोग करने के बाद भी मूल पोस्टर के समान त्रुटि प्राप्त हो रही थी git filter-branch। मेरे मामले में समाधान, .git/packed-refsफ़ाइल को हटाना था ।
यार्न

1
@knittl, मैंने पाया कि इसे कैसे ठीक किया जाए, लेकिन यह नहीं पाया कि समस्या क्या थी। मूल रूप से, मैंने --ignore-unmatchकमांड में जोड़ा git rmऔर यह आसानी से चला गया!
गैब्रियलियस

21

मूल बैकअप निकालने के लिए इस कमांड का उपयोग करें:

git update-ref -d refs/original/refs/heads/master

यहाँ gist है जिसका उपयोग मैंने अपने git repo को फ़िल्टर करने के लिए किया था: https://gist.github.com/k06a/25a0214c98bc19fd6817


बैकअप को हटाने के लिए यह सही समाधान है! हटाने .git/refs/original/से समस्या हल नहीं होती है।
एरिक कोपामंस

'मास्टर' को उस शाखा में बदलना सुनिश्चित करें जिसे आप ठीक करने का प्रयास कर रहे हैं .. मेरे मामले में 'विकास'
डेमियन ग्रीन

git show-ref | awk '/ refs.original.refs/{print$2}'आपके रेपो के सभी बैकअप खोजने के लिए।
डैन

4

मेरे पास भी यही समस्या थी और ऊपर दिए गए उत्तर ने इसे ठीक नहीं किया। कोई .git / refs / मूल / निर्देशिका नहीं बची थी। मेरे लिए इसका समाधान .it / पैक-रीफ़ फ़ाइल को हटाना था।


एक ही समस्या है। .git/packed-refsहालाँकि, कोई फ़ाइल, और कोई फ़ोल्डर नहीं originalहै .git/refs। किसी को?
XedinUnogn 13

कमांड को ध्वज जोड़कर यहां हल -rकिया गया।
XedinUnogn

यहां भी यही समस्या। पैक्ड-रेफ को हटाने से समस्या हल हो गई, लेकिन इसने मेरी बाकी डायरेक्ट्री को भी बर्बाद कर दिया, और मुझे बैकअप से पुनर्स्थापित करना पड़ा।
केविन यिन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.