Git: पुश के बाद प्रतिबद्ध फ़ाइल निकालें


112

क्या गिट में एक प्रतिबद्ध फ़ाइल को वापस करने की संभावना है? मैंने GitHub के लिए एक प्रतिबद्ध किया है और फिर मुझे एहसास हुआ कि एक फाइल है जिसे मैं धक्का नहीं देना चाहता था (मैंने परिवर्तनों को समाप्त नहीं किया है)।


1
क्या आप पुश के बाद फ़ाइल को पूरी तरह से GitHub से निकालना चाहते हैं? अन्यथा आप बस: git rm <file>, git push
rdrmntn


जवाबों:


153

अद्यतन: सुरक्षित तरीका जोड़ा गया

पसंदीदा विधि:

  1. अपनी फ़ाइल की पिछली (अपरिवर्तित) स्थिति देखें; डबल डैश पर ध्यान दें

    git checkout HEAD^ -- /path/to/file
    
  2. इसे प्रतिबद्ध करें:

    git commit -am "revert changes on this file, not finished with it yet"
    
  3. यह धक्का, कोई बल की जरूरत:

    git push
    
  4. अपने अधूरे काम पर वापस जाएं, फिर से करें (3 बार तीर मारें):

    git checkout HEAD^ -- /path/to/file
    

प्रभावी रूप से 'परेशान':

रिपॉजिटरी HEAD के अंतिम कमिट को संशोधित करने के लिए, अपने आकस्मिक रूप से धकेल दिए गए कार्य को बाधित करते हुए, संभवतः अपने सहकर्मी के साथ संघर्ष में भाग लेना, जिसने इसे पहले ही खींच लिया हो, और जो भूरे बाल उगाएगा और अपने स्थानीय शाखा प्रमुख को समेटने की कोशिश में बहुत समय गंवा देगा। केंद्रीय एक के साथ:

अंतिम परिवर्तन से फ़ाइल परिवर्तन को हटाने के लिए:

  1. अंतिम प्रतिबद्ध से पहले राज्य में फ़ाइल को वापस करने के लिए, करें:

    git checkout HEAD^ /path/to/file
    
  2. अंतिम फ़ाइल को अद्यतन करने के लिए, क्या करें:

    git commit --amend
    
  3. रेपो में अपडेट की गई कमिट को पुश करने के लिए:

    git push -f
    

वास्तव में, पहले बताई गई पसंदीदा विधि का उपयोग करने पर विचार करें।


1
जब तक आप किसी प्रोजेक्ट के एकमात्र डेवलपर नहीं होते, तब तक आपको वास्तव में git push -f का उपयोग नहीं करना चाहिए। यह मूल्य की तुलना में अधिक समस्याएं पैदा करता है। बस फ़ाइल को हटा दें फिर एक नया कमिट करें।
रिछारमाड

1
@ user553086 अधिक सहमत नहीं हो सका। अब बेहतर है?
XOR

क्या यह इतिहास में वापस आने के साथ उल्लेखनीय है? जैसे मैं इसके साथ कर सकता हूं git checkout HEAD~2 /path/to/file? संपादित करें: लगता है कि मैं अपने मामले में जो चाहता था वह बस थाgit rm /path/to/file
starscream_disco_party

1
आपने मुझे 4 घंटे बचा लिया भाई!
टॉसीन ऑनिक्यूट

56

यदि आप फ़ाइल को दूरस्थ रेपो से हटाना चाहते हैं, तो पहले इसे अपने प्रोजेक्ट से हटा दें - कैश विकल्प और फिर इसे पुश करें:

git rm --cache /path/to/file
git commit -am "Remove file"
git push

(यह तब भी काम करता है जब फ़ाइल को कुछ समय पहले रिमोट रेपो में जोड़ा गया था) फ़ाइल एक्सटेंशन को .gitignore में जोड़ना याद रखें जिसे आप पुश नहीं करना चाहते हैं।


2
यह इस कमेटी से फाइलों को हटा देता है, लेकिन पुराने कमिट के भीतर फाइल अभी भी दिखाई देती है।
केन

30

आप किसी निर्दिष्ट संशोधन में केवल एक फ़ाइल को वापस कर सकते हैं।

पहले आप जांच कर सकते हैं कि कौन सा फ़ाइल बदल गया था।

git log path/to/file.txt

फिर आप रिवीजन नंबर के साथ फाइल को चेकआउट कर सकते हैं।

git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt

उसके बाद आप इसे फिर से पुश कर सकते हैं।


7

फ़ाइल को एक सही स्थिति में रीसेट करें, कमिट करें, और फिर से पुश करें।

यदि आप सुनिश्चित हैं कि किसी और ने आपके परिवर्तन अभी तक नहीं लिए हैं, तो आप --amendअपनी पिछली प्रतिबद्धताओं (यानी इतिहास को फिर से लिखना) को संशोधित करने के लिए, और फिर धक्का दे सकते हैं। मुझे लगता है कि आपको -fधक्का देने के लिए विकल्प का उपयोग करना होगा , हालांकि जोर लगाने के लिए।


4
  1. अंतिम प्रतिबद्ध का हैश कोड प्राप्त करें।

    • git log
  2. कमिट रिवर्ट करें
    • git revert <hash_code_from_git_log>
  3. परिवर्तनों को धक्का दें
    • git push

GHR में देखें। आपको कभी भी आपकी आवश्यकता हो सकती है, आशा है कि यह उपयोगी है

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