सामग्री पर जाएं
GitTree

गिट गाइड

गिट रीसेट, रीबेस और कमिट को पूर्ववत करें: गिट में कुछ भी (लगभग) कैसे पुनर्प्राप्त करें

गिट शायद ही कभी काम को अच्छे के लिए फेंक देता है। यहां बताया गया है कि अंतिम कमिट को कैसे पूर्ववत किया जाए, एक संशोधन, गिट रीसेट --हार्ड, एक रिबेस, एक हटाई गई शाखा या गिट रिफ्लॉग के साथ एक फोर्स-पुश, और कैसे GitTree का पूर्ववत एक क्लिक में इसके अधिकांश भाग को संभालता है।

द्वारा लिखित Kodmoraअद्यतन किया गया 16 मिनट पढ़ा
GitTree चेरी-पिक, रिवर्ट, क्रिएट ब्रांच, टैग और तुलना कार्यों के साथ प्रतिबद्ध मेनू

गिट रीसेट, रिबेस या कमिट को पूर्ववत करने के लिए, git reflog चलाएँ, गलती से ठीक पहले की प्रविष्टि ढूंढें और अपनी शाखा को उस पर वापस इंगित करें, उदाहरण के लिए git reset --hard HEAD@{1} के साथ। Git HEAD के हर कदम और रिफ्लॉग में प्रत्येक शाखा को लॉग करता है, और डिफ़ॉल्ट रूप से खोई हुई कमिट की प्रविष्टि को भी 30 दिनों के लिए रखता है (90 अभी भी एक शाखा पर कमिट के लिए), इसलिए प्रतिबद्ध कार्य लगभग कभी नहीं जाता है। एक वास्तविक अपवाद वह कार्य है जो आपने कभी नहीं किया।

नीचे प्रत्येक सामान्य गलती का नुस्खा दिया गया है। प्रत्येक कमांड सादा Git है और macOS, Windows और Linux पर समान रूप से काम करता है। Windows पर, उन्हें गिट बैश में चलाएं, जो Git for Windows के साथ आता है: पावरशेल को उद्धरण चिह्नों में HEAD@{1} जैसे रीफ्लॉग नामों की आवश्यकता है और इसमें कोई grep नहीं है। अंत में आप देखेंगे कि कैसे GitTree, एक डेस्कटॉप Git क्लाइंट, 19 प्रकार के ऑपरेशन के लिए एक पुनर्प्राप्ति स्नैपशॉट रखता है ताकि अधिकांश गलतियाँ एक क्लिक के साथ वापस आ जाएँ।

Git पूर्ववत चीट शीट: प्रत्येक गलती के लिए आदेश

अपनी स्थिति का पता लगाएं, फिर कुछ भी चलाने से पहले उसका अनुभाग पढ़ें। HEAD@{1} का अर्थ है "जहाँ HEAD एक कदम पहले था"; यदि आपने तब से अन्य कमांड चलाए हैं, तो पहले git reflog से सही संख्या देखें।

सामान्य Git गलतियों के लिए आदेश पूर्ववत करें
गलतीआदेशका ध्यान रखें
अंतिम प्रतिबद्धता, परिवर्तन रखेंgit reset --soft HEAD~1केवल उन प्रतिबद्धताओं के लिए जिन्हें आपने आगे नहीं बढ़ाया है
अंतिम प्रतिबद्धता, पहले ही आगे बढ़ा दी गई हैgit revert HEADएक कमिट जोड़ता है जो पुराने को रद्द कर देता है
एक ख़राब git commit --amendgit reset --soft HEAD@{1}HEAD के दोबारा हिलने से पहले इसे चलाएँ
git reset --hardgit reset --hard HEAD@{1}अप्रतिबद्ध परिवर्तन रीफ्लॉग में नहीं हैं
एक पूर्ण रिबेसgit reset --hard ORIG_HEADअगला रीसेट, मर्ज या रीबेस ORIG_HEAD को अधिलेखित कर देता है
एक स्थानीय विलयgit reset --hard ORIG_HEADएक बार धकेलने के बाद, git revert -m 1 <merge> का उपयोग करें
एक हटाई गई शाखाgit branch <name> <hash>हैश डिलीट मैसेज या रीफ्लॉग में है
एक गिरा हुआ भंडारgit stash apply <hash>हैश ड्रॉप संदेश में है
एक ज़ोर-धकेलgit push --force-with-lease origin <hash>:mainबीच में खींचने वाले किसी भी व्यक्ति को चेतावनी दें

Git reflog ने समझाया: प्रत्येक कमांड के अंतर्गत सुरक्षा जाल

रीफ्लॉग (संदर्भ लॉग) एक निजी डायरी है जहां HEAD और आपकी शाखा के सुझावों ने इंगित किया है। प्रत्येक कमिट, चेकआउट, रीसेट, मर्ज, रीबेस, संशोधन और पुल एक लाइन जोड़ता है, और रिमोट-ट्रैकिंग शाखाओं जैसे कि origin/main को भी एक मिलता है। यह केवल आपके स्थानीय .git फ़ोल्डर में रहता है: इसे कभी भी पुश नहीं किया जाता है, और एक ताज़ा क्लोन एक खाली से शुरू होता है।

git reflog
git reflog show main
git reflog --date=relative

रिबेस के बाद एक सामान्य git reflog इस तरह दिखता है, सबसे पहले नवीनतम प्रविष्टि:

6c55495 HEAD@{0}: rebase (finish): returning to refs/heads/feature-login
6c55495 HEAD@{1}: rebase (pick): Validate the email field
cb6e15e HEAD@{2}: rebase (pick): Add the login form
2c44bc3 HEAD@{3}: rebase (start): checkout main
595b83d HEAD@{4}: commit: Validate the email field

गलती से पहले की नवीनतम पंक्ति को पढ़ें: यहां HEAD@{4}, rebase (start) से पहले की गई प्रतिबद्धता। जहां भी Git प्रतिबद्धता की अपेक्षा करता है, उसके हैश या उस नाम का उपयोग करें; main@{2.hours.ago} भी काम करता है. प्रविष्टियाँ 90 दिनों के बाद समाप्त हो जाती हैं, या 30 दिनों के बाद कोई शाखा नहीं पहुँच सकती है, और जब तक कोई प्रविष्टि मौजूद रहती है git gc अपनी प्रतिबद्धता बनाए रखती है।

चार चरणों में git reflog के साथ खोई हुई प्रतिबद्धता पुनर्प्राप्त करें

  1. रीफ्लॉग की सूची बनाएं

    एक शाखा के लिए git reflog, या git reflog show <branch> चलाएँ, और गलती से पहले की नवीनतम प्रविष्टि नोट करें।

  2. प्रतिबद्धता का निरीक्षण करें

    यह जाँचने के लिए git log --oneline -5 HEAD@{4} चलाएँ कि यह वही स्थिति है जिसे आप वापस चाहते हैं। अभी भी कुछ नहीं बदला है.

  3. इसे बचाव शाखा पर सहेजें

    git branch rescue HEAD@{4} चलाएँ. आपकी फ़ाइलें वैसी ही रहेंगी जैसी वे हैं, और प्रतिबद्धता अब समाप्त नहीं हो सकती।

  4. अपनी शाखा को पीछे ले जाएँ

    जो कुछ भी आपको अभी भी चाहिए उसे प्रतिबद्ध करें या छिपाएँ, टूटी हुई शाखा पर git reset --hard rescue चलाएँ, फिर git branch -d rescue से सहायक को हटा दें।

Git अंतिम प्रतिबद्धता को पूर्ववत करें: नरम, मिश्रित या हार्ड रीसेट

यदि कमिट अभी भी केवल आपके कंप्यूटर पर है, तो git reset शाखा को एक कमिट पीछे ले जाता है। मोड तय करता है कि इसके परिवर्तनों का क्या होगा:

git reset --soft HEAD~1
git reset HEAD~1
git reset --hard HEAD~1
  • --soft परिवर्तनों को चरणबद्ध रखता है, दोबारा प्रतिबद्ध होने के लिए तैयार रहता है: संदेश को ठीक करने या भूली हुई फ़ाइल को जोड़ने के लिए आदर्श।
  • --mixed, डिफ़ॉल्ट, आपके कार्यशील फ़ोल्डर में परिवर्तनों को बिना चरणबद्ध रखता है, ताकि आप कमिट को विभाजित कर सकें।
  • --hard कमिट के साथ-साथ किसी भी अप्रतिबद्ध संपादन के साथ परिवर्तनों को हटा देता है। रीफ्लॉग कुछ समय के लिए कमिट रखता है, लेकिन दो बार सोचें।

यदि आपने इसे पहले ही दबा दिया है, तो इसे दोबारा न लिखें: git revert HEAD एक नया कमिट रिकॉर्ड करता है जो इसे रद्द कर देता है। नि:शुल्क पाठ धकेलने के बाद गलतियों को सुधारें में रिवर्ट और वापसी के अन्य सुरक्षित तरीकों को शामिल किया गया है।

गिट कमिट को पूर्ववत करें--संशोधन करें

एक संशोधन प्रतिबद्धता को एक नई प्रतिबद्धता से बदल देता है; मूल रीफ्लॉग में रहता है। संशोधन के ठीक बाद, git reset --soft HEAD@{1} शाखा को मूल पर वापस रख देता है और जो संशोधन जोड़ा गया है उसे चरणबद्ध छोड़ देता है। बाद में, git reflog में commit (amend) पंक्ति ढूंढें और उसके नीचे की प्रविष्टि का उपयोग करें।

git reset --soft HEAD@{1}

गिट रीसेट को पूर्ववत कैसे करें --हार्ड

एक हार्ड रीसेट शाखा को स्थानांतरित करता है और आपकी फ़ाइलों को अधिलेखित कर देता है, लेकिन इसके द्वारा छोड़े गए कमिट अभी भी Git के ऑब्जेक्ट डेटाबेस में हैं। रीफ्लॉग चाल को reset: moving to HEAD~2 के रूप में दिखाता है, और इसके नीचे की रेखा वह है जहां आप थे। यदि रीसेट आपका अंतिम आदेश था, तो यह सब कुछ वापस लाता है:

git reflog
git reset --hard HEAD@{1}
git fsck --lost-found

गिट रिबेस को पूर्ववत कैसे करें

यदि रिबेस किसी विरोध पर रुक जाता है, तो git rebase --abort शाखा, अनुक्रमणिका और आपकी फ़ाइलों को वहीं लौटा देता है जहां वे थीं। यदि यह समाप्त हो गया, तो आपके पास वापसी के दो रास्ते हैं। जब रिबेस शुरू होता है तो Git पुराने टिप पर ORIG_HEAD इंगित करता है, इसलिए ठीक बाद में git reset --hard ORIG_HEAD इसे पूर्ववत कर देता है। शाखा का स्वयं का रिफ्लॉग अभी भी अधिक मजबूत है: एक रिबेस शाखा को केवल एक बार rebase (finish) पर स्थानांतरित करता है, इसलिए शाखा बिल्कुल वैसी ही है जैसी वह feature-login@{1} थी। जब कोई रिबेस या चेरी-पिक रुकता है, तो पाठ सक्रिय ऑपरेशन जारी रखें, छोड़ें या निरस्त करें प्रत्येक तरीके को समझाता है।

git rebase --abort
git reset --hard ORIG_HEAD
git reset --hard feature-login@{1}

यदि आपने पुनर्आधारित शाखा को धक्का दिया था, तो इसे पुनर्स्थापित करने के लिए बल-पुश की आवश्यकता होती है (नीचे देखें)। जानबूझकर इतिहास को फिर से लिखने के लिए, गिट जीयूआई में इंटरैक्टिव रिबेस पर हमारी मार्गदर्शिका पढ़ें।

गिट मर्ज को पूर्ववत करें

मर्ज पुराने टिप को भी ORIG_HEAD में छोड़ देता है, इसलिए git reset --hard ORIG_HEAD उस टिप को पूर्ववत कर देता है जिसे आपने पुश नहीं किया है। मध्य-संघर्ष, git merge --abort आपको बाहर निकालता है, या गिट मर्ज विवादों को हल करने के लिए हमारे गाइड का पालन करें। एक पुश किया गया मर्ज git revert -m 1 <merge-commit> के साथ वापस कर दिया जाता है; बाद में उस शाखा को फिर से विलय करने से वे परिवर्तन वापस नहीं आएंगे जब तक कि आप पूर्ववत न कर दें।

git merge --abort
git reset --hard ORIG_HEAD
git revert -m 1 <merge-commit>

हटाई गई Git शाखा (और गिरा हुआ भंडार) पुनर्प्राप्त करें

किसी शाखा को हटाने से नाम हट जाता है, कमिट नहीं। git branch -D उस टिप को प्रिंट करता है जिस पर शाखा इंगित करती है, और उस हैश से फिर से शाखा बनाकर उसे पुनर्स्थापित करती है:

git branch feature-login 1a2b3c4
git reflog | grep "moving from feature-login"

वह आउटपुट खो गया? HEAD का रीफ्लॉग अभी भी याद है। दूसरा आदेश checkout: moving from feature-login to main पाता है; एक अंक अधिक की प्रविष्टि (यदि मिलान HEAD@{5} है तो HEAD@{6}) शाखा की अंतिम प्रतिबद्धता है। यदि शाखा अभी भी रिमोट पर है, तो git branch feature-login origin/feature-login तेज है। पूरी शाखा के बजाय एक कमिट को वापस लाने के लिए, इसे चेरी-पिक के साथ लागू करें।

गिरा हुआ भंडार पुनः प्राप्त करें

git stash drop और git stash pop उनके द्वारा हटाए गए स्टैश के हैश को प्रिंट करते हैं, और git stash apply <hash> उसे वापस लाते हैं। हैश के बिना, Git का दस्तावेज़ अगम्य स्टैश कमिट के लिए इस खोज का सुझाव देता है; यह डिफ़ॉल्ट "डब्ल्यूआईपी ऑन..." संदेश के साथ सहेजे गए भंडार को ढूंढता है:

git stash apply 9d668e5
git fsck --unreachable | grep commit | cut -d' ' -f3 | xargs git log --merges --no-walk --grep=WIP --oneline

फ़ोर्स-पुश को कैसे पूर्ववत करें

एक फ़ोर्स-पुश रिमोट शाखा को आपकी शाखा से बदल देता है, इसलिए जो कमिट केवल रिमोट पर थे वे उससे बाहर हो जाते हैं। आपकी रिमोट-ट्रैकिंग शाखा एक रीफ्लॉग भी रखती है: origin/main@{1} वह जगह है जहां रिमोट शाखा आपके पुश से पहले थी, जैसा कि आपने इसे आखिरी बार देखा था, और पुश आउटपुट ने उसी हैश को प्रिंट किया था जो old...new के पहले भाग के रूप में था।

git reflog show origin/main
git push --force-with-lease origin 1a2b3c4:main

यदि रिमोट आपके आखिरी बार लाने के बाद से हिल गया है तो --force-with-lease पुश को अस्वीकार कर देता है, इसलिए आप गलती से किसी टीम के साथी के फिक्स को ओवरराइट नहीं कर सकते। जो कमिट आपने कभी प्राप्त नहीं किए वे आपके कंप्यूटर पर कभी नहीं थे; जिसने भी उन्हें धक्का दिया वह उन्हें फिर से धक्का दे सकता है। फिर बीच में खींचने वाले को बताएं। पुश की गई गलतियों को ठीक करने पर वीडियो पूरी मरम्मत दिखाता है।

GitTree में एक-क्लिक पूर्ववत करें: 19 प्रकार के ऑपरेशन के लिए एक पुनर्प्राप्ति स्नैपशॉट

उपरोक्त सभी चीज़ें GitTree में भी काम करती हैं: यह आपके इंस्टॉल किए गए Git (2.39 या नए) को चलाता है, और इसका अंतर्निहित टर्मिनल कमिट ग्राफ़ के तहत आपका स्वयं का शेल खोलता है। यह क्या जोड़ता है: GitTree 19 प्रकार के ऑपरेशन के लिए refs/ogt/trash के तहत एक पुनर्प्राप्ति स्नैपशॉट रखता है, जो भी विनाशकारी कदम चलने से पहले हटा दिया जाएगा उसे सहेजता है, और टूलबार में पूर्ववत करें बटन अंतिम चरण को उलट देता है।

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

Undo and Redo sit in the GitTree toolbar, and the commit menu in the graph offers Reset, Revert and Interactive Rebase for any commit.
Undo and Redo sit in the GitTree toolbar, and the commit menu in the graph offers Reset, Revert and Interactive Rebase for any commit.

19 में से दो को उलटने के बजाय रखा गया है। एक बल-पुश रिमोट को बदल देता है, जिसे केवल दूसरा धक्का ही वापस बदल सकता है, इसलिए GitTree टिप को प्रतिस्थापित रखता है और उस धक्का को आपके पास छोड़ देता है (यह हमेशा --force-with-lease के साथ बल-पुश करता है)। एक गिरा हुआ स्टैश स्नैपशॉट लिया गया है, लेकिन पूर्ववत करें इसे अभी तक पुनर्स्थापित नहीं करता है। GitTree उस पूर्ववत करने से भी इनकार करता है जो बाद के काम को अधिलेखित कर देगा, और बताता है कि क्यों। ऐप से सामान्य पुश को पूर्ववत नहीं किया जा सकता; इसके बजाय वापस लौटें।

रीसेट अपने तीन मोड को नाम देता है: सॉफ्ट सभी परिवर्तनों को चरणबद्ध रखता है, मिक्स्ड उन्हें कार्यशील फ़ोल्डर में रखता है, और हार्ड स्नैपशॉट के बाद उन्हें हटा देता है जिसे पूर्ववत पुनर्स्थापित किया जा सकता है।
रीसेट अपने तीन मोड को नाम देता है: सॉफ्ट सभी परिवर्तनों को चरणबद्ध रखता है, मिक्स्ड उन्हें कार्यशील फ़ोल्डर में रखता है, और हार्ड स्नैपशॉट के बाद उन्हें हटा देता है जिसे पूर्ववत पुनर्स्थापित किया जा सकता है।

GitTree में किसी रीसेट, रीबेस या हटाई गई शाखा को पूर्ववत कैसे करें

  1. हमेशा की तरह काम करें

    किसी शाखा को रीसेट करें, पुनः आधार बनाएं, त्यागें या हटाएं जैसा कि आप सामान्य रूप से करते हैं। GitTree पहले स्नैपशॉट लेता है; हार्ड रीसेट संवाद ऐसा कहता है।

  2. पूर्ववत करें पर क्लिक करें

    टूलबार में पूर्ववत करें पर क्लिक करें या इसे कमांड पैलेट (Ctrl/⌘+Shift+P) से चलाएँ। इसका टूलटिप चरण का नाम देता है, जैसे "पूर्ववत करें: शाखा सुविधा-लॉगिन हटाएं"; एक ऐसा कदम जिसे पूर्ववत नहीं किया जा सकता, दिखाता है कि क्यों।

  3. रिफ्लॉग के साथ और पीछे जाएं

    पूर्ववत करें वह कवर करता है जो GitTree ने स्वयं चलाया था। टर्मिनल में टाइप किए गए कमांड के लिए, पैलेट से View Reflog… चलाएँ, एक प्रविष्टि चुनें और शाखा के रूप में रीस्टोर चुनें।

  4. पुश करने से पहले ग्राफ़ की जाँच करें

    कमिट ग्राफ़ शाखा को वहीं दिखाता है जहाँ वह थी, ताकि आप अपने कंप्यूटर से कुछ भी निकलने से पहले परिणाम की पुष्टि कर सकें।

आदतें जो हर Git गलती को उलटने योग्य रखती हैं

  • जल्दी प्रतिबद्ध हों, भले ही अव्यवस्थित ढंग से। केवल प्रतिबद्ध कार्य ही दोबारा कार्य तक पहुँचता है; इसे बाद में एक इंटरैक्टिव रिबेस के साथ व्यवस्थित करें।
  • जोखिम भरे संपादनों से पहले शाखा। git branch backup/before-rebase की कोई लागत नहीं है और यह कभी समाप्त नहीं होती।
  • कभी भी सादे `--force` का उपयोग न करें। --force-with-lease उन कमिटों को अधिलेखित नहीं करेगा जिन्हें आपने नहीं देखा है।
  • साझा इतिहास वापस लाएं, निजी इतिहास रीसेट करें। एक बार जब अन्य लोग कोई प्रतिबद्धता वापस ले लें, तो उसे वापस कर दें।
  • गिट को चालू रखें। GitTree को Git 2.39 या नए की जरूरत है, और Ubuntu 22.04 जहाज 2.34; देखें Ubuntu पर गिट को कैसे अपग्रेड करें।

क्या आप अभी भी टाइपिंग और क्लिक के बीच चयन कर रहे हैं? [Git GUI बनाम कमांड लाइन] पढ़ें (/hi/blog/git-gui-vs-command-line), या शुरुआती लोगों के लिए Git, GUI के साथ से शुरू करें।

GitTree के पास एक नि:शुल्क योजना है जो प्रत्येक Git सुविधा को कवर करती है, जिसमें निजी रिपॉजिटरी भी शामिल है, macOS 13 या बाद में, Windows 10 और 11 (x64) और 64-बिट Linux (x86_64: Ubuntu 22.04+, Debian 12+), और Nour, एआई सहायक, GitTree प्रो के साथ आता है (देखें) मूल्य निर्धारण). इसे साइन इन करने के लिए Git 2.39 या नए और GitTree खाते की आवश्यकता है। इसे डाउनलोड पृष्ठ से प्राप्त करें, या देखें कि यह Linux पर कैसे चलता है।

अक्सर पूछे जाने वाले प्रश्न

मैं गिट रीसेट-हार्ड को पूर्ववत कैसे करूँ?

git reflog चलाएँ और ठीक नीचे वाली पंक्ति खोजें reset: moving to …; वहीं आपकी शाखा थी. यदि रीसेट आपका अंतिम आदेश था, तो git reset --hard HEAD@{1} छोड़े गए कमिट को वापस लाता है। आपके द्वारा कभी भी किए गए परिवर्तन रीफ्लॉग में नहीं हैं, इसलिए Git उन्हें पुनर्स्थापित नहीं कर सकता; यदि आपने GitTree में हार्ड रीसेट चलाया है, तो यह पूर्ववत उन्हें पहले लिए गए स्नैपशॉट से पुनर्स्थापित करता है।

मैं अंतिम प्रतिबद्धता को कैसे पूर्ववत करूँ लेकिन अपने परिवर्तन कैसे रखूँ?

परिवर्तनों को चरणबद्ध बनाए रखने के लिए git reset --soft HEAD~1 चलाएँ, या अपने कार्यशील फ़ोल्डर में उन्हें अस्थिर रखने के लिए git reset HEAD~1 चलाएँ। दोनों केवल आपकी स्थानीय शाखा को फिर से लिखते हैं, इसलिए उन प्रतिबद्धताओं के लिए उनका उपयोग करें जिन्हें आपने आगे नहीं बढ़ाया है। किसी पुश किए गए कमिट के लिए, git revert HEAD चलाएँ, जो एक कमिट जोड़ता है जो इसे रद्द कर देता है।

गिट रिबेस समाप्त होने के बाद मैं उसे कैसे पूर्ववत करूँ?

रीबेस के ठीक बाद, git reset --hard ORIG_HEAD शाखा को उसके पुराने सिरे पर लौटा देता है। यदि आपने तब से अन्य कमांड चलाए हैं, तो git reset --hard <branch>@{1} का उपयोग करें: एक रिबेस शाखा को केवल एक बार स्थानांतरित करता है, जब यह समाप्त हो जाता है। यदि आपने पुनर्आधारित शाखा को धक्का दिया था, तो पुनर्स्थापित शाखा को --force-with-lease से धक्का दें।

गिट रीफ्लॉग कब तक खोई हुई प्रतिबद्धताओं को बरकरार रखता है?

एक खोई हुई प्रतिबद्धता, जिस पर अब कोई शाखा नहीं पहुंचती है, उसकी रीफ्लॉग प्रविष्टि को डिफ़ॉल्ट रूप से 30 दिनों तक बनाए रखता है; पिछले 90 दिनों से शाखा में अभी भी प्रतिबद्धताओं के लिए प्रविष्टियाँ। जबकि एक प्रविष्टि मौजूद है, कचरा संग्रहण अपनी प्रतिबद्धता रखता है। किसी कमिट को अनिश्चित काल तक बनाए रखने के लिए, उस पर एक शाखा या टैग लगाएं, उदाहरण के लिए git branch rescue <hash>, क्योंकि Git कभी भी किसी शाखा बिंदु को नहीं हटाता है।

क्या मैं गिट रीसेट-हार्ड के बाद अप्रतिबद्ध परिवर्तनों को पुनर्प्राप्त कर सकता हूँ?

आमतौर पर अकेले Git के साथ नहीं। रीफ्लॉग रिकॉर्ड आपके कामकाजी फ़ोल्डर में संपादन नहीं, बल्कि प्रतिबद्ध हैं, इसलिए अपने संपादक के स्थानीय इतिहास की जांच करें। चरणबद्ध फ़ाइलें लटकती हुई वस्तुओं के रूप में जीवित रह सकती हैं जिन्हें git fsck --lost-found बिना फ़ाइल नाम के, .git/lost-found/other/ पर लिखता है। GitTree स्नैपशॉट अपने स्वयं के हार्ड रीसेट से पहले परिवर्तनों को प्रस्तुत करता है।

मैं फ़ोर्स-पुश को कैसे पूर्ववत करूँ?

आपके द्वारा प्रतिस्थापित रिमोट टिप ढूंढें: git reflog show origin/main इसे origin/main@{1} के रूप में सूचीबद्ध करता है, और पुश आउटपुट ने इसे old...new में पहले हैश के रूप में दिखाया है। फिर git push --force-with-lease origin <hash>:main चलाएँ। यदि ओवरराइट किए गए पुश से यह पता चलता है कि आपने कभी कुछ प्राप्त नहीं किया है, तो जिसने भी उन्हें पुश किया है उसे दोबारा पुश करने के लिए कहें।

क्या GitTree गिट पुश को पूर्ववत किया जा सकता है?

नहीं, GitTree से एक सामान्य धक्का पूर्ववत नहीं किया जा सकता; इसके बजाय प्रतिबद्धता वापस करें। बल-पुश के लिए, GitTree रिमोट टिप को पुनर्प्राप्ति स्नैपशॉट में रखता है, इसलिए कुछ भी नहीं खोता है, लेकिन रिमोट को पुनर्स्थापित करने के लिए एक और पुश की आवश्यकता होती है। पूर्ववत करें में कमिट, रीसेट, रिबेस, चेकआउट और शाखा विलोपन जैसे स्थानीय संचालन शामिल हैं।

क्या गिट रीफ्लॉग मेरी टीम के साथ साझा किया गया है?

नहीं, रीफ्लॉग केवल आपके स्थानीय .git फ़ोल्डर में रहता है। इसे कभी भी धकेला नहीं जाता है, लाने से किसी और का क्लोन नहीं आता है और एक ताजा क्लोन एक खाली क्लोन से शुरू होता है। इसलिए किसी टीम के साथी की खोई हुई कमिट केवल उनकी मशीन पर ही पुनर्प्राप्त की जा सकती है, और आपका रीफ्लॉग आपके कमिट को बनाए रखता है, भले ही कोई दूरस्थ शाखा को अधिलेखित कर दे।

सूत्र

अन्य उत्पादों के बारे में दावों की जाँच उनके आधिकारिक पेजों के विरुद्ध 23 अक्टूबर 2026 पर की गई। कीमतें और सुविधाएँ बदलती हैं; विक्रेताओं के पृष्ठ सत्य का स्रोत हैं।