कहने की जरूरत नहीं है, गिट सबसे जटिल कमांडों में से एक है जिसे आप कभी भी अपनी मशीन पर इंस्टॉल करेंगे। 180 से अधिक उपकमांडों (संस्करण 2.55 में) के साथ, एक या दो के बारे में ऐसा होना भी बहुत अच्छा है जिसके बारे में आपने कभी नहीं सुना हो, प्रयास करना तो दूर की बात है।
रीफ्लॉग उपकमांड उन चीजों में से एक है: इसका उपयोग करें और आप किसी भी भयावह त्रुटि से उबर सकते हैं, लेकिन आप शायद ऐसा नहीं कर पाएंगे। हालाँकि, त्वरित परिचय और थोड़े से अभ्यास के साथ, आप इस सुरक्षा जाल को तैनात कर सकते हैं और एक आदेश से आपदा से बच सकते हैं।
गिट रीफ्लॉग: गिट लॉग की तरह, लेकिन हर चीज के लिए
यह उपकमांड पिछली सभी स्थानीय क्रियाओं का लॉग प्रदर्शित करता है
Git कभी-कभी यह आभास दे सकता है कि यह आपके द्वारा किए गए हर काम को रिकॉर्ड कर रहा है, और ज्यादातर मामलों में यह काफी सटीक है। लेकिन मानक गिट लॉग आपको पूरी कहानी नहीं बताता है, तो आप अधिक जानने के लिए कहां जाएं? पुनःफ्लॉग करें।
गिट लॉग और गिट रिफ्लॉग के बीच अंतर को समझना महत्वपूर्ण है क्योंकि आप दोनों से बहुत अलग परिणाम प्राप्त कर सकते हैं। आपकी स्थानीय मशीन पर एक छोटे, एकल-कार्य भंडार के लिए, दोनों अनिवार्य रूप से समान हैं:
लेकिन दूर से क्लोन किए गए एक बहुत पुराने भंडार के साथ, आपको बड़े अंतर दिखाई देंगे:
यहां क्या हो रहा है कि गिट लॉग आपको आपकी वर्तमान प्रतिबद्धता के बाद से उपलब्ध प्रतिबद्धताओं का इतिहास दिखा रहा है। इस बीच, git reflog स्थानीय रिपॉजिटरी में संदर्भ क्रियाओं का एक लॉग दिखाता है। क्रियाएँ कमिट, मर्ज या रीसेट जैसी चीज़ें हो सकती हैं। इनमें कुछ दूरस्थ इंटरैक्शन भी शामिल हैं, जैसे क्लोनिंग या अपस्ट्रीम से खींचना।
बुनियादी गिट रीफ्लॉग कमांड डिफ़ॉल्ट शॉर्टहैंड है गिट रीफ्लॉग दिखाएं उप-आदेश. यह वास्तव में विशिष्ट कॉलिंग का पर्याय है गिट लॉगयानी:
git log --walk-reflogs --abbrev-commit --pretty=oneline
यहाँ, –वॉक-रिफ्लॉग्स कमिट के बजाय रिफ्लॉग रिकॉर्ड दिखाता है, –सुंदर=ऑनलाइन प्रत्येक प्रविष्टि को एक पंक्ति में प्रदर्शित करता है और –कमी-आदेश बहुत छोटे पहचानकर्ता उत्पन्न करता है (उदाहरण के लिए “771eb26cc738ab21d9d4e3ec7e3b27c51fb0fa56” के बजाय “771eb26”)। लेकिन “रीफ्लॉग” को याद रखना इसकी तुलना में आसान है, और इसमें बनाए रखने के लिए कई अतिरिक्त उप-कमांड हैं, जिनमें सूची बनाना, हटाना और स्थानांतरित करना शामिल है।
आप न्यूनतम लंबाई निर्दिष्ट करने के लिए –abbrev=n का उपयोग करके हैश को छोटा कर सकते हैं, जो डिफ़ॉल्ट रूप से 7 है और 4 जितनी कम हो सकती है।
उदाहरण: सुधार पूर्ववत करें
सही जासूसी उपकरणों के साथ संभावित आपदा से कैसे उबरें
Git का रिफ्लॉग कमांड बहुत उपयोगी है क्योंकि यह उन स्थानीय कमिट्स तक पहुंच प्रदान करता है जिन्हें कभी सर्वर पर पुश नहीं किया गया है। ये नाजुक हैं क्योंकि आपकी स्थानीय मशीन के अलावा इनका कोई रिकॉर्ड नहीं है। रिफ्लॉग कमांड स्वयं कोई पुनर्प्राप्ति नहीं करता है, लेकिन यह एक कमिट के SHA1 हैश को प्रकट करके करता है जिसे वापस रोल किया जा सकता है।
एक सामान्य उदाहरण लें जिससे डेटा हानि हो सकती है: एक परिवर्तन। उपयोग गिट कमिट – ठीक करेंआप अंतिम कार्य को संशोधित कर सकते हैं, उसके संदेश को फिर से लिख सकते हैं या उसमें मौजूद फ़ाइल परिवर्तनों को बदल सकते हैं। उदाहरण के लिए, आप तुरंत एक बग ढूंढ सकते हैं जिसे ठीक करने की आवश्यकता है:
git add .
git commit -m 'bug fix for #672'
git commit --amend -m 'bug fix for #673'
यह एक बेहतरीन सुविधा है, लेकिन आपको पृष्ठभूमि में क्या चल रहा है, इसके बारे में जागरूक रहना होगा। जब आप –amend का उपयोग करते हैं, तो git पिछली कमिट को बदलने के लिए एक नई कमिट बनाता है। यदि आप कुछ इस तरह से शुरुआत करते हैं:
आप इसके साथ समाप्त होंगे: पुराने कमिट की जगह एक नया कमिट, जो स्वयं पहुंच योग्य नहीं है:
इस मामले में, यदि आपने कोई बदलाव किया है, लेकिन बाद में निर्णय लेते हैं कि आपने ऐसा नहीं किया है, तो git reflog आपको उस गुम प्रतिबद्धता को ढूंढने में मदद कर सकता है। शुरू करने के लिए, चलाएँ गिट रीफ्लॉग और लापता कमिट का SHA1 हैश निर्धारित करें:
SHA1—117ed62—हाथ में होने पर, अब आप परिवर्तनों को पूर्ववत करने के लिए git-checkout का उपयोग कर सकते हैं:
git checkout 117ed62
ध्यान दें कि git लॉग अब मूल तीन कमिट्स को बिना किसी सुधार के रिपोर्ट करता है:
इस बीच, git reflog पहले की तुलना में अधिक जानकारी उत्पन्न करता है:
रीफ्लॉग पहचानकर्ताओं का उपयोग करना
अधिकांश कमांड आईडी निर्यात करने के विकल्पों का समर्थन करते हैं
कई git कमांड आईडी निर्धारित करने के लिए SHA1 हैश के साथ काम करते हैं, जैसे git log 3dde11f। हालाँकि, git reflog प्रत्येक क्रिया के साथ HEAD@{4} जैसे सापेक्ष पहचानकर्ताओं को प्रिंट करता है। ये पहचानकर्ता आपको केवल प्रतिबद्ध आईडी की तुलना में उच्च स्तर पर एक विशिष्ट कार्रवाई की पहचान करने की अनुमति देते हैं।
आप रीफ्लॉग आईडी का उपयोग कई गिट कमांड के साथ कर सकते हैं, जिनमें डिफ, लॉग, शामिल हैं… जब गिट लॉग के साथ उपयोग किया जाता है, तो वे रीफ्लॉग जैसे अन्यथा दुर्गम डेटा को प्रकट कर सकते हैं। आप वर्तमान शाखा के आगे @ लगा सकते हैं।
यदि आप लंबे लॉग में रीफ्लॉग आईडी ढूंढ रहे हैं तो इसका उपयोग करें गिट रीफ्लॉग –ऑनलाइन –नो-डेकोरेट. –नो-डेकोरेट विकल्प रीफ्लॉग को शाखाओं और टैग जैसे लिंक को चिह्नित करने से रोकता है, इसलिए आईडी सुसंगत और पढ़ने में आसान होती हैं।
रीफ्लॉग उपकमांड आपका अंतिम पुनर्प्राप्ति उपकरण है
खैर, रीफ्लॉग सीधे आपके लिए कुछ भी पुनर्स्थापित नहीं करता है, लेकिन यह आपको अन्य गिट टूल और कमांड के माध्यम से ऐसा करने की अनुमति देता है। किसी भी पहुंच योग्य प्रतिबद्धता के SHA1 के साथ, आप किसी भी गिट कार्रवाई से उबर सकते हैं, चाहे वह उस समय कितना भी विनाशकारी क्यों न लगे।