git - पिछली प्रतिबद्धता पर वापस जाने के लिए मैं 'गिट रीसेट-हार्ड हेड' का उपयोग कैसे करूं?




head git-reset (2)

इस प्रश्न का उत्तर यहां दिया गया है:

मुझे पता है कि गिट ट्रैक करता है जो मैं अपने आवेदन में करता हूं, और जब तक मैं बदलाव नहीं करता तब तक यह उनके पास रहता है, लेकिन यहां पर जहां मैं लटका हूं:

जब मैं पिछली प्रतिबद्धता पर वापस लौटना चाहता हूं तो मैं इसका उपयोग करता हूं:

git reset --hard HEAD

और गिट रिटर्न:

HEAD is now at 820f417 micro

फिर मैं अपनी हार्ड ड्राइव पर फ़ाइलों को उस पिछली प्रतिबद्धता पर वापस कैसे करूं?

मेरे अगले कदम थे:

git add .
git commit -m "revert"

लेकिन मेरी हार्ड ड्राइव पर कोई भी फाइल नहीं बदली है ...

मैं सही / गलत क्या कर रहा हूँ?


सबसे पहले, यह ध्यान देने योग्य है कि git reset --hard संभावित रूप से खतरनाक कमांड है, क्योंकि यह आपके सभी अपरिचित परिवर्तनों को फेंक देता है। सुरक्षा के लिए, आपको हमेशा यह जांचना चाहिए कि इसका उपयोग करने से पहले git status का आउटपुट साफ़ (यानी खाली) है।

प्रारंभ में आप निम्न कहते हैं:

इसलिए मुझे पता है कि गिट ट्रैक करता है जो मैं अपने आवेदन में करता हूं, और यह तब तक चलता रहता है जब तक कि मैं बदलाव नहीं करता, लेकिन यहां पर जहां मैं लटका हूं:

यदि यह एक गलत धारणा प्रकट करता है, तो मुझे कहना चाहिए कि यह सही नहीं है। गिट केवल तभी फाइलों की स्थिति रिकॉर्ड करता है जब आप उन्हें चरणबद्ध करते हैं ( git add साथ) या जब आप कोई प्रतिबद्ध बनाते हैं। एक बार जब आप एक ऐसी प्रतिबद्धता बना लेते हैं जिसमें आपकी प्रोजेक्ट फाइलें किसी विशेष स्थिति में हों, तो वे बहुत सुरक्षित हैं, लेकिन तब तक गिट वास्तव में आपकी फ़ाइलों में "परिवर्तनों को ट्रैक नहीं कर रहा" है। (उदाहरण के लिए, भले ही आप फ़ाइल के नए संस्करण को चरणबद्ध करने के लिए git add , जो स्टेजिंग क्षेत्र में उस फ़ाइल के पहले चरणबद्ध संस्करण को ओवरराइट करता है।)

अपने प्रश्न में आप निम्नलिखित पूछने के लिए आगे बढ़ते हैं:

जब मैं पिछली प्रतिबद्धता पर वापस लौटना चाहता हूं तो मैं इसका उपयोग करता हूं: गिट रीसेट - हार्ड हेड और गिट रिटर्न: हेड अब 820f417 माइक्रो पर है

फिर मैं अपनी हार्ड ड्राइव पर फ़ाइलों को उस पिछली प्रतिबद्धता पर वापस कैसे करूं?

यदि आप git reset --hard <SOME-COMMIT> तो गिट होगा:

  • <SOME-COMMIT> पर इंगित करने के लिए अपनी वर्तमान शाखा (आमतौर पर master ) को वापस बनाएं।
  • फिर फ़ाइलों को अपने काम करने वाले पेड़ और इंडेक्स ("स्टेजिंग एरिया") में <SOME-COMMIT> में किए गए संस्करणों के समान <SOME-COMMIT>

HEAD आपके वर्तमान शाखा (या वर्तमान प्रतिबद्धता) को इंगित करता है, इसलिए सभी git reset --hard HEAD आपके द्वारा किए गए किसी भी असामान्य परिवर्तन को फेंकना है।

तो, मान लीजिए कि आप जिस अच्छी प्रतिबद्धता पर वापस जाना चाहते हैं वह f414f31 । (आप इसे git log या किसी भी इतिहास ब्राउज़र के माध्यम से पा सकते हैं।) फिर आप जो कुछ करना चाहते हैं उसके आधार पर आपके पास कुछ अलग-अलग विकल्प हैं:

  • इसके बजाय पुरानी प्रतिबद्धता को इंगित करने के लिए अपनी वर्तमान शाखा बदलें। आप इसे git reset --hard f414f31 साथ कर सकते हैं - git reset --hard f414f31 । हालांकि, यह आपकी शाखा के इतिहास को फिर से लिख रहा है, इसलिए यदि आप इस शाखा को किसी के साथ साझा करते हैं तो आपको इससे बचना चाहिए। साथ ही, f414f31 बाद आपने जो काम किया वह अब आपकी master शाखा के इतिहास में नहीं होगा।
  • एक नई प्रतिबद्धता बनाएं जो परियोजना के ठीक उसी स्थिति को f414f31 रूप में f414f31 , लेकिन केवल इतिहास में जोड़ती है, इसलिए आप कोई इतिहास नहीं खोते हैं। आप इस उत्तर में सुझाए गए चरणों का उपयोग करके ऐसा कर सकते हैं - कुछ ऐसा:

    git reset --hard f414f31
    git reset --soft [email protected]{1}
    git commit -m "Reverting to the state of the project at f414f31"
    

चेतावनी: git clean -f अनचाहे फ़ाइलों को हटा देगा, जिसका अर्थ है कि वे अच्छे के लिए चले गए हैं क्योंकि वे भंडार में संग्रहीत नहीं हैं। सुनिश्चित करें कि आप वास्तव में ऐसा करने से पहले सभी अनचाहे फ़ाइलों को हटाना चाहते हैं।

इसे आज़माएं और git clean -f देखें।

git reset --hard अनचाहे फ़ाइलों को नहीं हटाएगा, जहां git-clean ट्रैक की गई रूट निर्देशिका से किसी भी फाइल को हटा देगा जो गिट ट्रैकिंग के तहत नहीं है।

वैकल्पिक रूप से, जैसा कि @ पॉल बेट्स ने कहा था, आपको git clean -xdf करना चाहिए (हालांकि सावधान रहें - जो सभी अनदेखी फ़ाइलों को भी हटा देता है)।







git-revert