पाठ 30 · पुनर्प्राप्ति
GitTree पूर्ववत करें, पुनः करें और पुनर्प्राप्ति स्नैपशॉट
GitTree के टूलबार से किसी कमिट को पूर्ववत करें, उसे दोबारा करें, और जानें कि ऐप क्या वापस ले सकता है और क्या नहीं, कब मना करता है, और वह पुनर्प्राप्ति स्नैपशॉट क्यों रखता है।
- स्तर: इंटरमीडिएट
- 11 मिनट पढ़ा
- 6 मिनट का वीडियो
- अद्यतन किया गया
- इस पाठ से पहले: रीसेट: नरम, मिश्रित और कठोर, रीफ्लॉग के साथ खोई हुई कमिट ढूंढें
प्रगति इस ब्राउज़र में सहेजी गई.
चलाने से YouTube से वीडियो लोड होता है (गोपनीयता-उन्नत मोड)।
आप क्या सीखेंगे
- इसे दबाने से पहले पढ़ें कि अगला पूर्ववत या पुनः क्या करेगा।
- भविष्यवाणी करें कि किसी कमिट को पूर्ववत करने से उसके परिवर्तन चरणबद्ध रहते हैं, और Redo कमिट को वापस ला सकता है।
- पहचानें कि ऐप पूर्ववत या फिर से करने से इनकार क्यों करता है: शाखा स्थानांतरित हो गई, फ़ाइलें बदल गईं, रिमोट बदल दिया गया।
- जानें कि पुनर्प्राप्ति स्नैपशॉट क्या हैं और पुराने स्नैपशॉट को जानबूझकर कैसे हटाया जाए।
शुरू करने से पहले
आप private/undo-demo पर हैं, जो पाठ 18 के परिणाम एम से एक स्वच्छ कार्य वृक्ष की एक शाखा है। आप एक छोटा नोट बनाएंगे, docs/signup-recovery.md, और उसे प्रतिबद्ध करेंगे through GitTree, क्योंकि GitTree का पूर्ववत करना उन चरणों से ही काम करता है, जिन्हें वह स्वयं रिकॉर्ड करता है। किसी टर्मिनल में किया गया कमिट एक अलग चीज़ है और यह उस रिकॉर्ड में नहीं जाता है।
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 कमांड के साथ करें, दोनों एक ही प्रतिलिपि में नहीं। परिणाम पढ़ना हमेशा सुरक्षित होता है. मेनू लेबल, टूलटिप्स और नोटिस GitTree 2.0 की अपनी स्ट्रिंग्स और स्रोत से आते हैं। मूल कमांड Git 2.43 के साथ डिस्पोजेबल प्रतियों में चलाए गए थे और केवल Git मॉडल दिखाते थे, ऐप का रिकॉर्ड नहीं। GitTree चरण macOS, Windows या Linux पर नहीं चलाए गए।
अवधारणा और राज्य प्रभाव
GitTree अपने द्वारा निष्पादित चरणों का journal रखता है। पूर्ववत करें नवीनतम चरण को उलट देता है और Redo पिछले पूर्ववत चरण को दोहराता है। टूलबार टूलटिप चरण को नाम देता है, उदाहरण के लिए "पूर्ववत करें: प्रतिबद्ध करें..."। पहले इसे पढ़ें: यदि इसमें आपकी अपेक्षा के अलावा कुछ और नाम दिया गया है, तो रुकें।
विनाशकारी कदम से पहले, GitTree refs/ogt/trash/* के अंतर्गत एक recovery snapshot बचाता है और जर्नल प्रविष्टि लिखता है। उस रिकॉर्ड से पुनर्स्थापना को पूर्ववत करें, और केवल तब तक जब से कुछ भी नहीं बदला है: एक शाखा को केवल तभी वापस ले जाया जाता है जब यह अभी भी इंगित करता है कि चरण ने इसे कहाँ छोड़ा था, और फ़ाइलें केवल तभी पुनर्स्थापित की जाती हैं यदि इसके बाद किसी ने उन्हें संपादित नहीं किया। अन्यथा पूर्ववत करने से कारण बताकर इनकार कर दिया जाता है, और स्नैपशॉट रख लिया जाता है।
commit को पूर्ववत करने से शाखा पीछे चली जाती है और प्रतिबद्ध परिवर्तन चरणबद्ध रहते हैं, इसलिए कुछ भी नष्ट नहीं होता है। उस कमिट को दोबारा करने से शाखा फिर से उसी कमिट पर आगे बढ़ती है। प्रत्येक चरण को दोबारा नहीं किया जा सकता है, और कुछ को पूर्ववत नहीं किया जा सकता है: एक ज़ोरदार धक्का ने रिमोट को बदल दिया ("इसे वापस बदलने के लिए फिर से धक्का दें"); हटाए गए स्टैश को स्नैपशॉट के रूप में रखा गया है लेकिन अभी तक पूर्ववत नहीं किया गया है; सबसे पहले कमिट की कोई पूर्व स्थिति नहीं है। जो कदम बीच में ही रुक गया, उसे पूर्ववत करने का कोई पूरा परिणाम नहीं है।
स्नैपशॉट किसी शेड्यूल पर नहीं हटाए जाते. कमांड Delete Old Recovery Snapshots… आपको एक उम्र चुनने की सुविधा देता है, दिखाता है कि कौन से स्नैपशॉट पुराने हैं, और आपके पुष्टि करने के बाद ही उन्हें हटाता है। स्नैपशॉट को हटाने से उस चरण के लिए वापसी का रास्ता हट जाता है।
पूर्ववत करें और पुनः करें केवल स्थानीय रिपॉजिटरी को बदलते हैं। कुछ भी प्रकाशित नहीं है.
सटीक प्रोजेक्ट स्थिति तैयार करें
पाठ 18 के परिणाम एम की एक अलग सामान्य प्रति से शुरू करें जिस पर आप भरोसा करते हैं और अपने मूल को अछूता छोड़ दें। शाखा बनाएं और नोट बनाएं. DOC_LOST नोट की सामग्री है.
पूर्ण फ़ाइल इनपुट
केवल नीचे नामित चरण पर ही सहेजें। ये अंतिम नई लाइन के साथ पूर्ण UTF-8/LF निकाय हैं; कभी भी मार्कडाउन बाड़ चिपकाएँ नहीं। अपरिवर्तित चलने योग्य फ़ाइलें नामित इनपुट प्राप्त करती हैं। अलग-अलग संस्करणों में मूल को अधिलेखित नहीं किया जाना चाहिए।
डॉक्स/साइनअप-रिकवरी.एमडी - DOC_LOST
# Recovered signup work
Keep a branch name before leaving useful experimental work.GitTree में
पैलेट को Command+Shift+P से खोलें (Ubuntu पर Ctrl+Shift+P)। Undo और Redo टूलबार और पैलेट में हैं; शॉर्टकट हैं पूर्ववत करने के लिए Command+Z और दोबारा करने के लिए Command+Shift+Z या Command+Y (Ctrl पर Windows और Linux)।
- एक अलग प्रतिलिपि में, शाखा
private/undo-demoबनाएं और DOC_LOST कोdocs/signup-recovery.mdके रूप में सहेजें। परिवर्तन सूची खोलें: फ़ाइल नई है. - केवल उस फ़ाइल को चरणबद्ध करें और उसे सारांश
docs: demonstrate a reversible local commitके साथ प्रतिबद्ध करें। वास्तविक परिणाम की प्रतीक्षा करें. - टूलबार में Undo होवर करें. टूलटिप में लिखा है "पूर्ववत करें: प्रतिबद्ध करें..."। यदि यह किसी अन्य चरण का नाम देता है, तो रुकें: उस चीज़ को पूर्ववत न करें जिसे आप नहीं करना चाहते थे।
- एक बार Undo चुनें. नोटिस में कहा गया है, "अनडिड: कमिट।" शाखा एम पर वापस आ गई है और नोट staged है, हटाया नहीं गया है।
- होवर करें Redo. टूलटिप में लिखा है "फिर से करें: प्रतिबद्ध करें..."। एक बार Redo चुनें. नोटिस में लिखा है, "रेडिड: कमिट।" प्रतिबद्धता वापस आ गई है और कार्य वृक्ष साफ़ है।
- Separate stale-state copy. दूसरी प्रति में, चरण 1 से 4 दोहराएं, फिर, GitTree के बाहर, चरणबद्ध नोट को
git commit -m "docs: external move after app undo"के साथ लिखें। Redo को देखें: यह अक्षम है, और इसका कारण है "शाखा तब से स्थानांतरित हो गई है; पूर्ववत करने से वह परिवर्तन अधिलेखित हो जाएगा।" उसपर ताकत नहीं लगाएं। - पैलेट खोलें और Delete Old Recovery Snapshots… चलाएँ। 30 पर Older than (days) छोड़ें और Find चुनें। पढ़ें कि सूची क्या कहती है: या तो "कोई भी स्नैपशॉट इतना पुराना नहीं है।" या पुराने की सूची. संवाद बंद करें; पाठ समाप्त करने के लिए कुछ भी न हटाएँ।
पाठ्यक्रम में प्रत्येक सामान्य प्रतिबद्धता के लिए: Summary बताया गया विषय है, Description खाली है और विकल्प Amend Previous Commit, Skip Hooks, Add Signed-off-by, Different Author, Push After Commit और Allow Empty Commit बंद रहते हैं।
टर्मिनल में
टर्मिनल ऐप के जर्नल का उपयोग नहीं करता है. यह स्पष्ट Git मॉडल है कि कमिट पूर्ववत क्या करता है, पाठ 18 के परिणाम की different साफ़ प्रतिलिपि में:
git switch --create private/undo-demo
BEFORE_SHA="$(git rev-parse HEAD)"DOC_LOST को docs/signup-recovery.md के रूप में सहेजें, फिर:
git add -- docs/signup-recovery.md
git commit --quiet -m "docs: demonstrate a reversible local commit"
AFTER_SHA="$(git rev-parse HEAD)"
git reset --soft "$BEFORE_SHA"
git status --shortA docs/signup-recovery.mdशाखा वापस आ गई है और फ़ाइल चरणबद्ध है। फिर से आगे बढ़ना:
git reset --soft "$AFTER_SHA"
git status --shortस्थिति रिक्त है. ये आदेश ऐप को पूर्ववत या फिर से करने के लिए not कॉल करते हैं, GitTree जर्नल प्रविष्टि रिकॉर्ड करते हैं या एक स्नैपशॉट बनाते हैं; git for-each-ref refs/ogt/trash इस प्रति में कुछ भी प्रिंट नहीं करता है। ऐप-निर्मित टेक में यह वास्तविक स्नैपशॉट नामों को सूचीबद्ध करता है, जिन्हें आप बिना बदले पढ़ते हैं।
बासी कदम के विरुद्ध सुरक्षा तुलना-और-अदला-बदली है। Git का वही विचार update-ref में है, जो रेफरी को केवल तभी स्थानांतरित करता है जब वह अभी भी आपके अपेक्षित मूल्य को बरकरार रखता है। बाहरी प्रतिबद्धता के बाद:
git update-ref refs/heads/private/undo-demo "$AFTER_SHA" "$BEFORE_SHA"Git ने "रेफरी को लॉक नहीं कर सकता...पर है...लेकिन अपेक्षित है..." कहकर मना कर दिया। GitTree का स्वयं का इनकार टूलटिप में एक है: "शाखा तब से स्थानांतरित हो गई है; पूर्ववत करने से वह परिवर्तन अधिलेखित हो जाएगा।"
नतीजा
Where you end: पहली प्रति में नोट को प्रतिबद्ध किया गया था, पूर्ववत किया गया था (मंचन किया गया था, एम पर शाखा) और फिर से किया गया था (कमिट पर शाखा, पेड़ को साफ किया गया था)। पुरानी प्रति में Redo को अस्वीकार कर दिया गया क्योंकि शाखा स्थानांतरित हो गई थी, और बाहरी प्रतिबद्धता बरकरार रह गई थी। आपने स्नैपशॉट संवाद खोला और बिना कुछ हटाए उसे बंद कर दिया।
सामान्य गलतियाँ
- टूलटिप को पढ़े बिना पूर्ववत दबाना, और उस चरण को पूर्ववत करना जो आपका इरादा नहीं था।
- यह मानते हुए कि प्रत्येक क्रिया को पूर्ववत या फिर से किया जा सकता है: एक बल धक्का और एक हटाया गया स्टैश नहीं है, और अधिकांश चरणों में कोई दोबारा नहीं है।
- यह अपेक्षा की जा रही है कि GitTree के बाहर किसी संपादक में आपके द्वारा किए गए संपादनों को पूर्ववत किया जाए।
- व्यवस्थित करने के लिए पुराने स्नैपशॉट हटा रहा हूँ, जिससे वापसी का रास्ता निकल जाता है।
अगर कुछ गलत होता है
यदि पूर्ववत करना अक्षम है, तो टूलटिप में कारण पढ़ें: शाखा स्थानांतरित हो गई, फ़ाइलें संपादित की गईं, रिमोट बदल दिया गया, या पूर्ववत करने के लिए कुछ भी नहीं है। यदि किसी चरण को अस्वीकार कर दिया जाता है, तो उसका पुनर्प्राप्ति स्नैपशॉट refs/ogt/trash/* के अंतर्गत रखा जाता है; जब आप अनिश्चित हों तो इसे न हटाएं। GitTree के बाहर किए गए कमिट के लिए, पाठ 29 से रीफ्लॉग का उपयोग करें।
अपनी समझ की जाँच करें
प्रत्येक प्रश्न का उत्तर दें, फिर क्यों पढ़ें। "आवश्यक" चिह्नित प्रश्न पाठ को पूरा करने में गिने जाते हैं।
6 में से 0 सही
पाठ को पूरा करने के लिए आवश्यक प्रश्नों के सही उत्तर दें।
इस ब्राउज़र में चेक किया गया.
अभ्यास करें
लिखें कि पूर्ववत टूलटिप ने क्या कहा, पूर्ववत करने के बाद शाखा और चरणबद्ध सूची कैसी दिखती थी, और Redo ने क्या किया। बासी कॉपी में Redo द्वारा दिया गया कारण लिखें। फिर एक चरण का नाम बताएं जिसे ऐप पूर्ववत नहीं कर सकता और बताएं कि क्यों।
आपकी अपनी पुष्टि: साइट आपका कंप्यूटर नहीं देख सकती।
पाठ को पूरा करने के लिए आवश्यक प्रश्नों के सही उत्तर दें और व्यावहारिक अभ्यास की पुष्टि करें।
पुनर्कथन
- दबाने से पहले टूलटिप पढ़ें.
- किसी प्रतिबद्धता को पूर्ववत करने से उसके परिवर्तन चरणबद्ध रहते हैं।
- एक स्थानांतरित शाखा या संपादित फ़ाइलें पूर्ववत करने से इंकार कर देती हैं; स्नैपशॉट रखे गए हैं.
संबंधित
शब्दावली शब्द प्रस्तुत किये गये
पूर्ववत करें - ठीक है; पुनः करें - إعادة; जर्नल - سجل العمليات; पुनर्प्राप्ति स्नैपशॉट - لقطة استعادة.
वीडियो प्रतिलेख
वीडियो का वर्णन, संकेत दर संकेत।
प्रतिलिपि दिखाएँ
- GitTree कुछ कदम पीछे हट सकते हैं। यहाँ है यह कैसे और कहाँ रुकता है।
- GitTree अपने स्वयं के कदमों का एक जर्नल रखता है। पूर्ववत् नवीनतम को उलट देता है।
- जोखिम भरे कदम से पहले, यह एक रिकवरी बचाता है पहले स्नैपशॉट.
- हमारे पास एक शाखा है, और एक नया नोट है।
- केवल उस फ़ाइल को स्टेज करें.
- सारांश लिखें. सारे विकल्प बने रहते हैं बंद.
- एक बार प्रतिबद्ध हों, GitTree में ही।
- किसी टर्मिनल में किया गया कमिट इसमें नहीं है रिकार्ड.
- पूर्ववत करें पर होवर करें. टूलटिप चरण का नाम देता है: प्रतिबद्ध.
- यदि यह कुछ और नाम देता है, तो रुकें।
- एक बार पूर्ववत करें चुनें. नोटिस पूर्ववत कहता है प्रतिबद्ध.
- शाखा एम पर वापस आ गई है।
- और नोट चरणबद्ध है, हटाया नहीं गया है। कुछ भी नहीं खोया है.
- अब Redo उसी कमिट को नाम देता है।
- एक बार पुनः करें चुनें. प्रतिबद्धता वापस आ गई है.
- काम का पेड़ फिर से साफ हो गया है.
- दूसरी प्रति में, हम प्रतिबद्ध और पूर्ववत करते हैं उसी तरह.
- अब चरणबद्ध नोट को बाहर प्रतिबद्ध करें GitTree.
- पुनः करें अक्षम है. तब से शाखा स्थानांतरित हो गई।
- यह आपकी प्रतिबद्धता को अकेला छोड़ देता है। कभी भी जबरदस्ती न करें यह.
- अन्य कारण: संपादित फ़ाइलें, एक रिमोट बदल गया, पहली प्रतिबद्धता।
- अब स्नैपशॉट. पुरानी पुनर्प्राप्ति हटाएँ चलाएँ स्नैपशॉट.
- यह कहता है कि केवल सूचीबद्ध स्नैपशॉट हैं हटा दिया गया.
- तीस दिन छोड़ें, और ढूँढें चुनें।
- इसे बंद करें। कोई भी चीज़ अपने आप ख़त्म नहीं होती.
- एक सादे Git कॉपी में, एक सॉफ्ट रीसेट देता है एक ही आकार.
- फिर से आगे बढ़ें, पेड़ साफ है, और कोई ऐप स्नैपशॉट नहीं है.
- Git उसी तरह से रेफरी की सुरक्षा करता है: इसे स्थानांतरित करें केवल तभी जब यह आपकी अपेक्षा के अनुरूप हो।
- पूर्ववत करना कोई वैश्विक रिवाइंड नहीं है. यह उलट जाता है ऐप द्वारा रिकॉर्ड किए गए चरण।
- अभ्यास करें: टूलटिप लिखें, का परिणाम पूर्ववत करें, पुनः करें, और बासी कारण।
- आगे, अलग सिर का क्या मतलब है।