ज्यादातर मामलों में, हाँ।
राज्य पर निर्भर करते हुए आपकी रिपॉजिटरी जब आप कमांड चलाते थे, तो git reset --hard
तुच्छ से लेकर पूर्ववत, मूल रूप से असंभव तक के प्रभाव हो सकते हैं।
नीचे मैंने विभिन्न संभावित परिदृश्यों की एक सूची दी है, और आप उनसे कैसे उबर सकते हैं।
मेरे सभी परिवर्तन प्रतिबद्ध थे, लेकिन अब कमिट हो गए हैं!
यह स्थिति आमतौर पर तब होती है जब आप git reset
किसी तर्क से चलते हैं , जैसे किgit reset --hard HEAD~
। चिंता न करें, इससे उबरना आसान है!
यदि आपने अभी तक git reset
कुछ और नहीं किया है, तो आप इस वन-लाइनर के साथ वापस आ सकते हैं:
git reset --hard @{1}
यह आपकी वर्तमान शाखा को रीसेट करता है जो भी अंतिम समय से पहले इसे संशोधित किया गया था (आपके मामले में, शाखा में सबसे हालिया संशोधन आपको पूर्ववत करने की कोशिश कर रहा है हार्ड रीसेट होगा)।
अगर, हालांकि, आप है अन्य संशोधनों अपनी शाखा को रीसेट के बाद से बनाया है, एक लाइनर ऊपर काम नहीं करेगा। इसके बजाय, आपको अपनी शाखा में किए गए सभी परिवर्तनों की सूची (रीसेट सहित) देखने के लिए दौड़ना चाहिए । वह सूची कुछ इस तरह दिखाई देगी:git reflog
<branchname>
7c169bd master@{0}: reset: moving to HEAD~
3ae5027 master@{1}: commit: Changed file2
7c169bd master@{2}: commit: Some change
5eb37ca master@{3}: commit (initial): Initial commit
इस सूची में वह ऑपरेशन ढूंढें जिसे आप "पूर्ववत करना" चाहते हैं। ऊपर के उदाहरण में, यह पहली पंक्ति होगी, जो कहता है "रीसेट: HEAD ~ की ओर बढ़ रहा है"। फिर उस ऑपरेशन से पहले (नीचे) प्रतिबद्ध के प्रतिनिधित्व की प्रतिलिपि बनाएँ । हमारे मामले में, यह होगा master@{1}
(या 3ae5027
, वे दोनों एक ही प्रतिबद्ध का प्रतिनिधित्व करते हैं), और चलाते हैंgit reset --hard <commit>
अपनी वर्तमान शाखा को उस कमिट पर रीसेट करने के लिए ।
मैंने अपने परिवर्तनों का मंचन किया git add
, लेकिन कभी प्रतिबद्ध नहीं हुआ। अब मेरे परिवर्तन हो गए हैं!
इससे उबरने के लिए यह थोड़ा मुश्किल है। Git करता फ़ाइलें आपके द्वारा जोड़ा गया प्रतियां, लेकिन जब से इन प्रतियों किसी विशेष से बंधा कभी नहीं थे आप पुनर्स्थापित नहीं कर सकता एक ही बार में सभी परिवर्तन हो। इसके बजाय, आपको गिट के डेटाबेस में व्यक्तिगत फ़ाइलों का पता लगाना होगा और उन्हें मैन्युअल रूप से पुनर्स्थापित करना होगा। आप इस का उपयोग कर सकते हैं git fsck
।
इस पर जानकारी के लिए, स्टेजिंग क्षेत्र में अनकम्यूटेड फ़ाइलों के साथ पूर्ववत रीसेट रीसेट करें देखें ।
मैंने अपनी कार्यशील निर्देशिका में उन फ़ाइलों में परिवर्तन किया git add
, जिनके साथ मैंने कभी मंचन नहीं किया , और कभी प्रतिबद्ध नहीं रहा। अब मेरे परिवर्तन हो गए हैं!
उह ओह। मैं आपको यह बताने से नफरत करता हूं, लेकिन आप शायद किस्मत से बाहर हैं। git उन परिवर्तनों को संग्रहीत नहीं करता है जिन्हें आप इसमें जोड़ते हैं या इसके लिए प्रतिबद्ध नहीं हैं, और इसके लिए प्रलेखन केgit reset
अनुसार :
--मुश्किल
सूचकांक और काम करने वाले पेड़ को रीसेट करता है। कार्यशील ट्री में ट्रैक की गई फ़ाइलों में किसी भी परिवर्तन के बाद <commit>
से खारिज कर दिया जाता है।
यह संभव है कि आप कुछ प्रकार की डिस्क रिकवरी उपयोगिता या एक पेशेवर डेटा रिकवरी सेवा के साथ अपने परिवर्तनों को पुनर्प्राप्त करने में सक्षम हो सकते हैं, लेकिन इस बिंदु पर यह संभवत: इससे अधिक परेशानी है।