पाठ 26 · पुनर्प्राप्ति
कार्य को सुरक्षित रखें और इसे सुरक्षित रूप से फिर से शुरू करें
एक अधूरे संपादन और एक नए नोट को स्टैश के साथ अलग रखें, उन्हें अप्लाई के साथ वापस लाएँ, और देखें कि जब विरोध होता है तो पॉप क्या करता है: स्टैश तब तक रहता है जब तक आप निर्णय नहीं लेते।
- स्तर: इंटरमीडिएट
- 11 मिनट पढ़ा
- 5 मिनट का वीडियो
- अद्यतन किया गया
- इस पाठ से पहले: इच्छित स्नैपशॉट को स्टेज करें और अपनी पहली प्रतिबद्धता बनाएं, मर्ज और रीबेस विवादों का समाधान करें
प्रगति इस ब्राउज़र में सहेजी गई.
चलाने से YouTube से वीडियो लोड होता है (गोपनीयता-उन्नत मोड)।
आप क्या सीखेंगे
- चुनें कि भंडार में क्या जाता है: ट्रैक किए गए संपादन, अनट्रैक की गई फ़ाइलें, या केवल वही जो चरणबद्ध है।
- समझाएं कि क्यों अप्लाई छिपाव रखता है और पॉप इसे साफ़ अप्लाई के बाद ही हटाता है।
- सत्यापित करें कि संपादन और नोट दोनों वापस आ गए और शाखा हिली नहीं।
- बिना गुप्त धन खोए पॉप संघर्ष से उबरें।
शुरू करने से पहले
आप पाठ 18 के परिणाम से एक शाखा, private/stash-hint पर हैं, जिसमें एक प्रतिबद्धता है जो docs/stash-conflict.md जोड़ती है ("एक काल्पनिक पते का उपयोग करें।")। आपके कार्य ट्री में आपके पास उस फ़ाइल का अधूरा संपादन और एक नई फ़ाइल, docs/signup-hint.md है, जिसे Git ने कभी नहीं देखा है। कोई आपसे किसी और चीज़ पर स्विच करने के लिए कहता है, तो आप चाहते हैं कि आधा-अधूरा काम किए बिना, दोनों को अलग रखा जाए।
Everything is local and on the Free plan (GitTree asks you to sign in): no hosting account, no provider, no internet. Every identity is fictional (example.com). Never run this lesson in a real project.
परिवर्तन GitTree या मूल Git कमांड के साथ करें, दोनों एक ही प्रतिलिपि में नहीं। परिणाम पढ़ना हमेशा सुरक्षित होता है. मेनू लेबल 2.0 के स्वयं के स्ट्रिंग्स से आते हैं और मूल कमांड डिस्पोजेबल प्रतियों में Git 2.43 के साथ चलाए गए थे। GitTree चरण macOS, Windows या Linux पर नहीं चलाए गए।
अवधारणा और राज्य प्रभाव
स्टैश आपके स्थानीय परिवर्तनों को Git ऑब्जेक्ट के रूप में संग्रहीत करता है और फिर कार्य ट्री को अंतिम कमिट तक साफ़ करता है। यह एक छोटा व्यवधान उपकरण है, न कि बैकअप और न ही उस शाखा का प्रतिस्थापन जिसे आप रखना चाहते हैं।
एक स्टैश डिफ़ॉल्ट रूप से ट्रैक किए गए संपादन रखता है। ट्रैक न की गई फ़ाइलें तब तक पीछे छोड़ दी जाती हैं जब तक कि आप उन्हें न मांगें, जैसा कि Git --include-untracked के साथ करता है। GitTree का Stash Changes… डायलॉग खुलने पर Include untracked files स्विच ऑन हो जाता है; फिर भी इसकी जाँच करें। उपेक्षित फ़ाइलें एक अलग श्रेणी हैं और यहां संग्रहीत नहीं हैं। Only staged changes इंडेक्स में जो कुछ है उसे छिपा देता है, और Keep staged changes in place too इंडेक्स को वैसे ही छोड़ देता है जैसा वह था।
Apply Stash परिवर्तनों को वापस रखता है और सूची में भंडार रखता है। Pop Stash इसे लागू करता है और प्रविष्टि को केवल तभी हटाता है जब आवेदन साफ हो। यदि यह विरोध करता है, तो भंडार बना रहता है, और आप कार्य वृक्ष में विरोध का समाधान करते हैं। GitTree के अप्लाई और पॉप चरणबद्ध स्थिति को पुनर्स्थापित नहीं करते हैं; git stash apply --index ऐसा करता है, लेकिन ऐप इसका उपयोग नहीं करता है, इसलिए चरणबद्ध संपादन बिना मंचित ही वापस आ जाते हैं।
छिपाना और लगाना कभी भी शाखा को न हिलाएं और न ही कोई प्रतिबद्धता बनाएं। केवल कार्य वृक्ष और स्टैश प्रविष्टि में परिवर्तन होता है।
सटीक प्रोजेक्ट स्थिति तैयार करें
प्रोजेक्ट की एक अलग सामान्य प्रति से प्रारंभ करें क्योंकि पाठ 18 ने इसे छोड़ दिया है और अपने मूल gittree-features को अछूता छोड़ दें। शाखा बनाएं, DOC_STASH_BASE सहेजें और इसे प्रतिबद्ध करें। फिर DOC_STASH_WORK को उसी फ़ाइल पर और DOC_HINT को एक नई फ़ाइल के रूप में सहेजें, बिना स्टेजिंग के। DOC_STASH_OTHER और STASH_RESOLVED का उपयोग केवल अलग विरोध प्रति में किया जाता है।
पूर्ण फ़ाइल इनपुट
केवल नीचे नामित चरण पर ही सहेजें। ये अंतिम नई लाइन के साथ पूर्ण UTF-8/LF निकाय हैं; कभी भी मार्कडाउन बाड़ चिपकाएँ नहीं। अपरिवर्तित चलने योग्य फ़ाइलें नामित इनपुट प्राप्त करती हैं। अलग-अलग संस्करणों में मूल को अधिलेखित नहीं किया जाना चाहिए।
docs/stash-conflict.md - DOC_STASH_BASE
Use a fictional address.docs/stash-conflict.md - DOC_STASH_WORK
Use a complete fictional email address.डॉक्स/signup-hint.md - DOC_HINT
Unfinished signup hint: use fictional data only.docs/stash-conflict.md - DOC_STASH_OTHER
Do not send the address anywhere.docs/stash-conflict.md - STASH_RESOLVED
Use a complete fictional email address. Nothing is sent.GitTree में
पैलेट को Command+Shift+P (Ubuntu पर Ctrl+Shift+P) से खोलें। स्टैश प्रविष्टियाँ बाएँ पैनल में Stashes के अंतर्गत सूचीबद्ध हैं; स्टैश की क्रियाएँ उसके राइट-क्लिक मेनू में होती हैं।
- जैसा कि अगले भाग में दिखाया गया है, शाखा और दो अस्थिर परिवर्तनों का निर्माण करें। परिवर्तन सूची पढ़ें:
docs/stash-conflict.mdसंशोधित है औरdocs/signup-hint.mdनया है। - पैलेट खोलें और Stash Changes… चलाएँ। डायलॉग में Message से
signup hint rehearsalसेट करें। Only staged changes बंद है. Include untracked files चालू है. Keep staged changes in place too बंद है. Stash चुनें. - सूचना की प्रतीक्षा करें "आपके परिवर्तन छिपा दिए गए।" परिवर्तन सूची खाली है, नोट डिस्क से चला गया है और स्टैश Stashes के अंतर्गत दिखाई देता है।
- स्टैश पंक्ति पर होवर करें: इसका टूलटिप कहता है "अनट्रैक की गई फ़ाइलें शामिल हैं"। इसे राइट-क्लिक करें और Show Stash चुनें: ग्राफ़ स्टैश का चयन करता है और दायां पैनल इसके ट्रैक किए गए परिवर्तन को सूचीबद्ध करता है,
docs/stash-conflict.md। ट्रैक न किए गए नोट को भंडार के एक अलग हिस्से में रखा जाता है। - इसे दोबारा राइट-क्लिक करें और Apply Stash चुनें। नोटिस में कहा गया है, "स्टैश लागू किया गया; यह अभी भी सूची में है।"
- परिणाम की जाँच करें:
docs/stash-conflict.mdको फिर से संशोधित किया गया है,docs/signup-hint.mdएक अनट्रैक फ़ाइल के रूप में वापस आ गया है, शाखा टिप वही प्रतिबद्ध है और स्टैश अभी भी सूचीबद्ध है। - Separate conflict copy. दूसरी प्रतिलिपि में, स्टैश के बाद, उसी फ़ाइल में DOC_STASH_OTHER प्रतिबद्ध करें। स्टैश पर राइट-क्लिक करें और Pop Stash चुनें। चेतावनी कहती है, "यह भंडार आपके परिवर्तनों के साथ टकराव करता है: विवादों का समाधान करें। भंडार रखा जाता है।"
- विवादित फ़ाइल Conflicted के साथ सूचीबद्ध है। इसे खोलें, आउटपुट में STASH_RESOLVED लिखें और Save and Mark Resolved चुनें। भंडार अभी भी वहीं है. जब आप आश्वस्त हो जाएं कि कार्य सुरक्षित है, तो उस पर राइट-क्लिक करें और Delete Stash… चुनें; संवाद कहता है कि इसे सूची से हटा दिया गया है और पुनर्प्राप्ति स्नैपशॉट में रखा गया है। GitTree का पूर्ववत करना अभी तक हटाए गए स्टैश को पुनर्स्थापित नहीं करता है (पाठ 30), इसलिए हटाने को अंतिम मानें।
पाठ्यक्रम में प्रत्येक सामान्य प्रतिबद्धता के लिए: Summary बताया गया विषय है, Description खाली है और विकल्प Amend Previous Commit, Skip Hooks, Add Signed-off-by, Different Author, Push After Commit और Allow Empty Commit बंद रहते हैं।
टर्मिनल में
पाठ 18 के परिणाम की एक अलग प्रति में:
git switch --create private/stash-hintDOC_STASH_BASE को docs/stash-conflict.md के रूप में सहेजें, फिर:
git add -- docs/stash-conflict.md
git commit --quiet -m "docs: establish the stash conflict baseline"स्टेजिंग के बिना, DOC_STASH_WORK को docs/stash-conflict.md से अधिक और DOC_HINT को docs/signup-hint.md के रूप में सहेजें। फिर दोनों को संग्रहित करें:
git stash push --include-untracked --message "signup hint rehearsal"
git status --short
git stash list --format=%sOn private/stash-hint: signup hint rehearsalस्थिति कुछ भी प्रिंट नहीं करती: पेड़ साफ़ है। विरोध के लिए इस स्थिति की एक अछूती प्रति रखें, फिर आवेदन करें:
git stash apply 'stash@{0}'
git status --short
git stash list --format=%s
git rev-parse HEAD M docs/stash-conflict.md
?? docs/signup-hint.md
On private/stash-hint: signup hint rehearsalदोनों निकाय वापस आ गए हैं, भंडार अभी भी सूचीबद्ध है और HEAD प्रतिबद्ध है। --include-untracked के बिना, वही पुश डिस्क पर docs/signup-hint.md छोड़ देता है और केवल संपादन को छिपा देता है।
अलग प्रतिलिपि में, DOC_STASH_OTHER सहेजें और इसे प्रतिबद्ध करें, फिर पॉप करें:
git add -- docs/stash-conflict.md
git commit --quiet -m "docs: change the stash target"
git stash pop 'stash@{0}'
git ls-files --unmerged
git stash list --format=%sपॉप 1 के साथ बाहर निकलता है और "CONFLICT (सामग्री)" प्रिंट करता है और "यदि आपको दोबारा इसकी आवश्यकता होती है तो स्टैश प्रविष्टि रखी जाती है।" तीन असंबद्ध प्रविष्टियाँ सूचीबद्ध हैं, फ़ाइल में विरोध चिह्न हैं, docs/signup-hint.md पुनर्स्थापित किया गया है, और स्टैश अभी भी सूचीबद्ध है। जारी रखने के लिए कोई मर्ज या रीबेस नहीं है: STASH_RESOLVED सहेजें और git add -- docs/stash-conflict.md चलाएँ। इसके बजाय कार्य को अपनी शाखा में पार्क करने के लिए, git stash branch rescue-hint 'stash@{0}' उस स्थान पर शाखा बनाता है जहां स्टैश बनाया गया था, इसे लागू करता है, और केवल तभी स्टैश को हटाता है।
नतीजा
Where you end: पहली प्रति में पेड़ का संपादन और नोट फिर से है, HEAD स्थानांतरित नहीं हुआ है, और भंडार अभी भी सूचीबद्ध है। संघर्ष प्रतिलिपि में पॉप ने संघर्ष की सूचना दी, भंडार बच गया, और आपका समाधान चरणबद्ध है। किसी भी स्टैश कमांड द्वारा कोई प्रतिबद्धता नहीं बनाई गई थी, और कुछ भी आगे नहीं बढ़ाया गया था।
सामान्य गलतियाँ
- यह भूल जाना कि ट्रैक न की गई फ़ाइलें तब तक संग्रहीत नहीं की जातीं जब तक आप उन्हें शामिल नहीं करते।
- यह मानते हुए कि पॉप ने संघर्ष के बाद स्टैश को हटा दिया है। मैंने नहीं किया।
- जब पहला आवेदन पहले से ही काम कर रहा हो तो दो बार आवेदन करना, फिर डुप्लिकेट परिवर्तनों के बारे में सोचना।
- एक दीर्घकालिक भंडार के रूप में भंडार का उपयोग करना। किसी शाखा के साथ उपयोगी कार्य का नाम बताएं।
अगर कुछ गलत होता है
पॉप विरोध के बाद, स्टैश को जगह पर छोड़ दें, फ़ाइल को हल करें, और कुछ भी हटाने से पहले परिणाम की जांच करें। यदि आपने गलत शाखा में आवेदन किया है, तो उस कार्य को तभी त्यागें जब आप यह पुष्टि कर लें कि भंडार अभी भी बचा हुआ है। Create Branch from Stash… स्टैश को उस स्थान पर अपनी शाखा देता है जहां इसे बनाया गया था।
अपनी समझ की जाँच करें
प्रत्येक प्रश्न का उत्तर दें, फिर क्यों पढ़ें। "आवश्यक" चिह्नित प्रश्न पाठ को पूरा करने में गिने जाते हैं।
6 में से 0 सही
पाठ को पूरा करने के लिए आवश्यक प्रश्नों के सही उत्तर दें।
इस ब्राउज़र में चेक किया गया.
अभ्यास करें
साबित करें कि स्टैश के बाद पेड़ साफ़ था, अप्लाई ने दोनों फ़ाइलों को पुनर्स्थापित किया, और स्टैश अभी भी सूचीबद्ध है। भविष्यवाणी करें कि यदि Include untracked files बंद हो तो क्या फर्क पड़ेगा। संघर्ष प्रतिलिपि में, साबित करें कि छिपा हुआ सामान पॉप से बच गया।
आपकी अपनी पुष्टि: साइट आपका कंप्यूटर नहीं देख सकती।
पाठ को पूरा करने के लिए आवश्यक प्रश्नों के सही उत्तर दें और व्यावहारिक अभ्यास की पुष्टि करें।
पुनर्कथन
- जानबूझकर स्टैश विकल्प चुनें।
- लागू करें प्रविष्टि रखता है।
- एक परस्पर विरोधी पॉप भी इसे बनाए रखता है।
संबंधित
शब्दावली शब्द प्रस्तुत किये गये
स्टैश - مخبأ; लागू करें - تطبيق; पॉप - تطبيق وحذف; अनट्रैक्ड - غير متتبَّع.
वीडियो प्रतिलेख
वीडियो का वर्णन, संकेत दर संकेत।
प्रतिलिपि दिखाएँ
- अधूरे काम को किनारे रख कर ले आओ सुरक्षित वापस.
- एक भंडार आपके संपादनों को एक शेल्फ पर रखता है, और कार्य वृक्ष को साफ़ करता है.
- लागू करें परिवर्तन वापस लाता है और रखता है प्रवेश. साफ होने पर पॉप इसे हटा देता है।
- एक कमिट के साथ एक शाखा बनाएं, फिर संपादित करें फ़ाइल और एक नया नोट जोड़ें।
- परिवर्तन सूची में: एक संशोधित फ़ाइल, और एक नई फ़ाइल.
- वर्तमान प्रतिबद्धता लिखें. यह नहीं होना चाहिए हटो.
- पैलेट खोलें और स्टैश चेंजेस चलाएँ।
- इसे एक संदेश दें जिसे आप पहचान लेंगे।
- केवल मंचन बंद है. अनट्रैक किया गया शामिल करें पर. स्टेज बनाए रखना बंद है.
- उपेक्षित फ़ाइलें एक अलग श्रेणी हैं, और अंदर मत जाओ.
- स्टैश चुनें, और नोटिस की प्रतीक्षा करें।
- परिवर्तन सूची खाली है, और भंडार सूचीबद्ध है.
- टूलटिप कहता है कि ट्रैक न की गई फ़ाइलें हैं शामिल. शो स्टैश अपनी फ़ाइलों को सूचीबद्ध करता है।
- स्टैश पर राइट-क्लिक करें और अप्लाई चुनें छिपाना।
- नोटिस में कहा गया है कि भंडार अभी भी मौजूद है सूची.
- दोनों वापस आ गए हैं: संपादन और नोट।
- शाखा टिप एक ही प्रतिबद्ध है. नहीं स्टैश कमांड ने एक बनाया।
- और भंडार अभी भी शेल्फ पर है।
- टर्मिनल में, git stash के साथ पुश करें अनट्रैक्ड, फिर स्थिति शामिल करें।
- सूची संदेश दिखाती है, के साथ शाखा का नाम पहले.
- git stash apply दोनों को वापस लाता है।
- भंडार अभी भी सूचीबद्ध है, और HEAD है वही.
- उस विकल्प के बिना, नोट चालू रहता है डिस्क.
- संघर्ष प्रतिलिपि में, हम दूसरा प्रतिबद्ध करते हैं पहले बदलें, और फिर पॉप करें।
- चेतावनी कहती है कि भंडार रखा हुआ है। द फ़ाइल विवादित है.
- फ़ाइल का समाधान करें, और उसे हल हो गया के रूप में चिह्नित करें. भंडार अभी भी वहीं है.
- जब आप आश्वस्त हों तभी स्टैश हटाएँ। या इसे अपनी शाखा दें.
- अभ्यास करें: स्वच्छ, पुनर्स्थापित और सुरक्षित साबित करें। फिर अनट्रैक किए गए को शामिल किए बिना भविष्यवाणी करें।
- इसके बाद, जानें कि नरम, मिश्रित और क्या रीसेट करें प्रत्येक परिवर्तन कठिन.