क्या मैं Git में इसके विलोपन के बाद एक शाखा पुनः प्राप्त कर सकता हूँ?


1065

अगर मैं दौड़ता हूं git branch -d XYZ, तो क्या शाखा को ठीक करने का कोई तरीका है? क्या वापस जाने का कोई तरीका है जैसे कि मैंने डिलीट ब्रांच कमांड नहीं चलाया है?


4
स्वीकृत उत्तर के बारे में बनाने के लिए वास्तव में भयानक नोट यह है कि यह काम करता है भले ही शाखा को मूल रूप से हटा दिया गया हो! मैंने बस कई शाखाएँ बरामद कीं जो स्थानीय रूप से उनके पास नहीं थीं, क्योंकि वे गलती से मूल में हटा दी गईं थीं।
दिबांग 21:18

जवाबों:


1954

हां, आपको git reflogअपनी हटाई गई शाखा की नोक पर कमेटी के लिए SHA1 करने और खोजने में सक्षम होना चाहिए git checkout [sha]। और एक बार जब आप उस प्रतिबद्ध होते हैं, तो आप git checkout -b [branchname]वहां से शाखा को फिर से बना सकते हैं।


इस संघनित / वन-लाइनर संस्करण के लिए @ कैस्केबेल को श्रेय।

आप इसे एक चरण में कर सकते हैं:

git checkout -b <branch> <sha>

477
आप इसे एक चरण में कर सकते हैं git checkout -b <branch> <sha>:।
Cascabel

200
त्वरित टिप - यदि आपने शाखा को हटा दिया है तो आपको अपने टर्मिनल में कुछ इस तरह दिखाई देगा - "हटा दी गई शाखा <अपनी शाखा> ((<sha>)"। और फिर यह सुपर-आसान है - बस इसका उपयोग करें <sha>। जैसे कि ऊपर बताया गया है -git checkout -b <branch> <sha>
स्नोक्रैश

6
हाँ बस अपने टर्मिनल में स्क्रॉल करें (जब तक आपने नहीं किया था CMD+K)
neaumusic

42
git reflog --no-abbrevपूर्ण देखने के लिए उपयोग करें <sha>जो डिफ़ॉल्ट रूप से संक्षिप्त किया जा रहा है।
jkulak

5
मेरे जैसे किसी और के लिए, जिसे डिलीट की गई शाॅप को खोजने में परेशानी हुई: मैं सक्षम था git checkout remotes/origin/deleted_branch
जेफ इरविन

161

अधिकांश समय पहुंच से बाहर होने के कारण वापसी नहीं होती है। इसलिए, पहली कोशिश यह है कि कमांड का उपयोग करके रिफ्लॉग को देखेंgit reflog (जो कि रिफ्लॉग को प्रदर्शित करता है HEAD)।

शायद कुछ आसान हो अगर कमिट एक विशिष्ट ब्रांच का हिस्सा था जो अभी भी मौजूद है तो कमांड का उपयोग करना है git reflog name-of-my-branch । यह एक रिमोट के साथ भी काम करता है, उदाहरण के लिए यदि आप पुश को मजबूर करते हैं (अतिरिक्त सलाह: हमेशाgit push --force-with-lease इसके बजाय पसंद करें कि बेहतर गलतियों को रोकें और अधिक वसूली योग्य हो)।


यदि आपके कमिट आपके रिफ्लोग में नहीं हैं (शायद इसलिए कि एक 3 पार्टी टूल द्वारा हटा दिया गया है जो कि रिफ्लॉग में नहीं लिखते हैं), मैंने सफलतापूर्वक अपनी शाखा को एक कमांड का उपयोग करते हुए पाए गए कमिट के आकार में रीसेट करके पुनर्प्राप्त कर लिया है (यह सभी झूलने वाले फ़ाइल बनाता है):

git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt

यदि आपको इसका एक से अधिक बार उपयोग करना चाहिए (या इसे कहीं बचाना चाहते हैं), तो आप उस आदेश के साथ एक उपनाम भी बना सकते हैं ...

git config --global alias.rescue '!git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt'

और इसके साथ प्रयोग करें git rescue

पाए गए कमिट्स की जांच करने के लिए, आप उन्हें देखने के लिए कुछ कमांड्स का उपयोग करके प्रत्येक कमिट को प्रदर्शित कर सकते हैं।

प्रतिबद्ध मेटाडेटा प्रदर्शित करने के लिए (लेखक, निर्माण की तारीख और संदेश):

git cat-file -p 48540dfa438ad8e442b18e57a5a255c0ecad0560

यह भी देखने के लिए:

git log -p 48540dfa438ad8e442b18e57a5a255c0ecad0560

एक बार जब आप अपनी कमिटमेंट पा लेते हैं, तो इस कमेटी के साथ एक ब्रांच बनाएं:

git branch commit_rescued 48540dfa438ad8e442b18e57a5a255c0ecad0560

उन लोगों के लिए जो Windows के अंतर्गत हैं और GUI पसंद करते हैं, आप सुविधा => => का उपयोग करके GitExtensions के साथ आसानी से कमिट (और अनमैक्ड स्टेज्ड फ़ाइलें) पुनर्प्राप्त कर सकते हैं।RepositoryGit maintenanceRecover lost objects...


हटाए गए फ़ाइलों को आसानी से पुनर्प्राप्त करने के लिए एक समान आदेश: https://stackoverflow.com/a/58853981/717372


2
भारी मदद। मेरी एक खोई हुई प्रतिबद्धता थी जो मेरे स्थानीय रेपो में कभी नहीं थी। पहली कमांड जो आपने वहां रखी है, उसने मुझे सर्वर पर खोजने में मदद की। +1
सीन एडकिंसन

1
कि गिट बचाव उर्फ ​​एक भगवान है !!! योगदान के लिए बहुत बहुत धन्यवाद!
72A12F4E

2
तुमने मेरी जान बचाई।
जेड लिंच

पैट्रिक Koorevaar के जवाब से मुझे मदद मिली, क्योंकि मुझे नहीं पता कि मेरा पिछला डिलीट किया हुआ ब्रान्च कमिट्स <sha> है।
मोनिर खान

@ मोनीर-खान और? मुझे क्या निष्कर्ष निकालना चाहिए? पैट्रिक का जवाब मेरी आज्ञा की एक कॉपी / पेस्ट है (एक त्रुटि के साथ: वह कमिट पर फ़िल्टर करना भूल गया) ...
फिलिप

45

यदि आप GUI का उपयोग करना पसंद करते हैं, तो आप पूरे ऑपरेशन को gitk के साथ कर सकते हैं।

gitk --reflog

यह आपको शाखा के प्रतिबद्ध इतिहास को देखने की अनुमति देगा जैसे कि शाखा को हटाया नहीं गया था। अब बस शाखा के लिए सबसे हाल ही में प्रतिबद्ध पर राइट क्लिक करें और मेनू विकल्प का चयन करें Create new branch


28

शीर्ष मतदान समाधान वास्तव में अनुरोध से अधिक है:

git checkout <sha>
git checkout -b <branch>

या

git checkout -b <branch> <sha>

हाल ही में किए गए सभी परिवर्तनों के साथ आपको नई शाखा में ले जाना, जो आप करना भूल गए हैं। यह आपका इरादा नहीं हो सकता है, खासकर जब शाखा खोने के बाद "आतंक मोड" में।

एक क्लीनर (और सरल) समाधान (आप पाया के बाद एक-लाइनर हो रहा है <sha>के साथ git reflog):

git branch <branch> <sha>

अब न तो आपकी वर्तमान शाखा और न ही बिना परिवर्तन प्रभावित हुए हैं। इसके बजाय केवल एक नई शाखा को ही बनाया जाएगा<sha>

यदि यह टिप नहीं है, तो यह अभी भी काम करेगा और आपको एक छोटी शाखा मिलती है, तो आप नए <sha>और नए शाखा नाम के साथ पुन: प्रयास कर सकते हैं जब तक कि आप इसे ठीक नहीं करते।

अंत में आप सफलतापूर्वक बहाल की गई शाखा का नाम बदल सकते हैं।

git branch -m <restored branch> <final branch>

कहने की जरूरत नहीं है, सफलता की कुंजी सही कमिटमेंट को ढूंढना था <sha>, इसलिए अपने कामों को समझदारी से नाम दें :)


14

स्पष्ट उत्तर में जोड़ना : Git स्रोतों के क्षेत्र में git-resurrect.sh स्क्रिप्ट भी contrib/है (git.git रिपॉजिटरी में), जो आपकी मदद कर सकती है।

git-resurrect <name>एक शाखा टिप के निशान को खोजने का प्रयास किया जाता है <name>, और इसे फिर से जीवित करने की कोशिश करता है। वर्तमान में, रिफ्लॉग को चेकआउट संदेशों के लिए खोजा जाता है, और -rसंदेशों को मर्ज भी किया जाता है। साथ -mऔर -t, सभी refs के इतिहास के लिए स्कैन किया जाता है Merge <name> into other/ Merge <other> into <name>(क्रमशः) विषयों के लिए प्रतिबद्ध है, जो बल्कि धीमी है, लेकिन आप अन्य लोगों के विषय शाखाओं को फिर से शुरू करने के लिए अनुमति देता है।


1
इसने मेरे लिए अब काम किया, हालाँकि मुझे अपने PATH में / usr / lib / git-core / जोड़ना पड़ा। लेकिन यह वह चमत्कार नहीं कर पाया जिसकी मुझे आशा थी :(
AmanicA

10

मैंने अपनी हटाई गई शाखा को खोजने और पुनः प्राप्त करने के लिए निम्न आदेशों का उपयोग किया। पहला चरण जीसीबी के विवरण से है।

$ git fsck --full --no-reflogs --unreachable --lost-found > lost
$ cat lost | cut -d\  -f3 > commits
$ cat commits | xargs -n 1 git log -n 1 --pretty=oneline

अब कमेंट कमेंट्स के आधार पर git कमिट आईडी (GIT-SHA) की तलाश करें और नीचे कमांड में इसका उपयोग करें। पहले से मिली GIT-SHA के साथ NEW-BRANCH नामक एक नई शाखा की जाँच करें:

$ git checkout -b NEW-BRANCH GIT-SHA

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

9

यदि आपके पास कोई रिफ्लॉग नहीं है, जैसे। क्योंकि आप एक नंगे रिपॉजिटरी में काम कर रहे हैं, जिसमें रिफ्लॉग सक्षम नहीं है और आप जो कमिट करना चाहते हैं, वह हाल ही में बनाया गया था, एक और विकल्प हाल ही में बनाई गई कमिट ऑब्जेक्ट्स को ढूंढना और उनके माध्यम से देखना है।

.git/objectsनिर्देशिका चलाने के अंदर से :

find . -ctime -12h -type f | sed 's/[./]//g' | git cat-file --batch-check | grep commit

यह पिछले 12 घंटों में बनाई गई सभी ऑब्जेक्ट (कमिट, फाइलें, टैग आदि) पाता है और उन्हें केवल कमिट दिखाने के लिए फिल्टर करता है। इनकी जाँच फिर एक त्वरित प्रक्रिया है।

मैं कोशिश करूँगा git-ressurect.sh स्क्रिप्ट का जकूब के उत्तर में पहले उल्लेख किया गया था ।


1
अच्छा वैकल्पिक विचार! आपकी कमांड हालांकि एक त्रुटि फेंकता है। समस्या "12 एच" भाग (वास्तव में "एच") के साथ है। एक बार जब मैंने "एच" को हटा दिया तो यह ठीक काम कर गया। से man find: "-ctime n - फ़ाइल की स्थिति अंतिम बार n बदल गई थी * 24 घंटे पहले।" इसलिए हमें पिछले 12 घंटों के अपेक्षित व्यवहार के लिए 12 से 0.5 को भी बदलना चाहिए।
पग्लियुका

1
मैं यहां OS X 10.8 का उपयोग कर रहा हूं, इसलिए ऊपर दिए गए 'खोज' झंडे उस संस्करण पर आधारित हैं जो यह जहाज करता है।
रॉबर्ट नाइट

1
हाँ, सुनिश्चित करें कि समस्या संस्करणों के साथ है! इसीलिए मैंने आपके जवाब को पहले स्थान पर रखा है! मैंने अभी टिप्पणी की है ताकि लोगों को एहसास हो कि पैरामीटर अलग हो सकते हैं।
पग्लियुका

9

के लिए GitHub Git के बिना उन स्थापित:

यदि आप इसे GitHub वेबसाइट से पुनर्स्थापित करना चाहते हैं , तो आप रेपो से संबंधित घटनाओं की सूची प्राप्त करने के लिए उनके API का उपयोग कर सकते हैं :

प्रथम

  • उन SHAs को खोजें (हैश करें):

    curl -i https://api.github.com/repos/PublicUser/PublicRepo/events

    ... या निजी प्रतिनिधि के लिए:

    curl -su YourUserName https://api.github.com/repos/YourUserName/YourProject/events

    (GitHub पासवर्ड के लिए संकेत दिया जाएगा)

    • (यदि रेपो टू-फैक्टर ऑर्क्युलेट करता है, तो नीचे दिए गए इस उत्तर पर टिप्पणी देखें।)

आगे

  • करने के लिए जाना GitHub और एक नया अस्थायी शाखा है जो हमेशा के लिए हटा दिया जाएगा बनाने ( क्रोम बेहतर है)।

   • शाखाओं में जाएं और उस एक को हटा दें।

   •   एक ही पृष्ठ पर, रीलोडिंग के बिना , DevTools, नेटवर्क पैनल खोलें। अब तैयारी करें ...

   • पुनर्स्थापना पर क्लिक करें। आपको एक नई "लाइन" दिखाई देगी। उस पर राइट-क्लिक करें और "प्रतिलिपि के रूप में कॉपी करें" चुनें और कुछ संपादक में इस पाठ को सहेजें।

   • कोड की नकल की रेखा के अंत में, यह एक -H "Cookie=":।

अब आपको कुछ इस तरह मिलना चाहिए:

    curl 'https://github.com/UserName/ProjectName/branches?branch=BranchSHA&name=BranchName' -H 'Cookie:' -H 'Origin: https://github.com' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US' -H 'User-Agent: User-Agent' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'Accept: */*' -H 'Referer: https://github.com/UserName/ProjectName/branches' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' --data 'utf8=%E2%9C%93&authenticity_token=token' --compressed

अंतिम चरण

  • वांछित नाम के साथ अपने SHA-hash और BranchName के साथ "BranchSHA" को बदलें (BTW, यह वेब से शाखा का नाम बदलने के लिए बहुत अच्छा है)। यदि आप बहुत धीमे नहीं थे, तो आपको किसी भी तरह यह अनुरोध करने की आवश्यकता है। उदाहरण के लिए, किसी टर्मिनल पर कॉपी-पेस्ट करें।

पुनश्च

मुझे लगता है कि यह "सरलतम समाधान" या "सही" समाधान नहीं हो सकता है, लेकिन यह किसी के लिए उपयोगी होने की स्थिति में पेश किया जाता है।


1
उपरोक्त कुछ में से एक है जो कि भरोसा नहीं करता है git reflogऔर इसलिए उदाहरण के लिए उपयोगी था जब एक दूरस्थ शाखा को हटा दिया गया था और कंप्यूटर तक पहुंच खो दी गई थी जिससे कुछ भी नहीं किया गया था जिससे उपयोगी ठंड प्राप्त नहीं की जा सकती थी reflog। ध्यान दें कि जब curlcurl -u username:token https://api.github.com/usercurl -H "Authorization: token TOKEN" https://api.github.com/repos/USER_OR_ORG_NAME/REPO_NAME/events
Gubub

@ TT-- वाह, मुझे खुशी है कि इसने मदद की! और टोकन के संबंध में आपके योगदान के लिए धन्यवाद :)
मैक्सिम माजुरोक

8

मेरी समझ से यदि हटाए जाने वाली शाखा को किसी अन्य शाखा द्वारा पहुँचा जा सकता है, तो आप इसे सुरक्षित रूप से उपयोग करके हटा सकते हैं

git branch -d [branch]

और आपका काम गुम नहीं हुआ है। याद रखें कि एक शाखा स्नैपशॉट नहीं है, लेकिन एक सूचक है। इसलिए जब आप एक शाखा को हटाते हैं तो आप एक पॉइंटर को हटाते हैं।

यदि आप एक शाखा को हटा भी देते हैं तो आप वह काम नहीं छोड़ेंगे जो किसी दूसरे द्वारा नहीं किया जा सकता है। बेशक यह कमिट हैश की जाँच करना उतना आसान नहीं होगा, लेकिन फिर भी आप इसे कर सकते हैं। इसलिए Git एक शाखा को हटाने में असमर्थ है जिसे उपयोग करके नहीं पहुँचा जा सकता है -d। इसके बजाय आपको उपयोग करना होगा

git branch -D [branch]

यह Git के बारे में Scott Chacon के एक वीडियो को अवश्य देखें। मिनट 58:00 जांचें जब वह शाखाओं के बारे में बात करता है और उन्हें कैसे हटाता है।

GitHub के स्कॉट चाकोन के साथ Git का परिचय


7
यह सवाल का जवाब देने में कैसे मदद कर रहा है?
दिमित्री ज़ैतसेव

6
पूछने वाले से कहना कि शाखाएँ सामग्री नहीं रखती हैं लेकिन वास्तव में संकेत हैं। आपको शाखाओं को हटाने से डरने की ज़रूरत नहीं है .. आप हटाए गए के रूप में एक ही प्रतिबद्ध की ओर इशारा करते हुए नए बना सकते हैं .... वाह! मुझे आज भी याद है जब मैंने यह सवाल पूछा था। 2012 के लिए अच्छा समय!
फेबियोपैगोटी

1
AT स्क्रीन पर तीन स्क्रीन स्क्रॉल करने के लिए एक उत्तर मिला जो समस्या को स्वीकार करता है: एक शाखा को हटाना केवल सूचक को हटा रहा है। यहां कोई डेटा हानि की स्थिति नहीं है, ठीक होने की एकमात्र बात यह है कि यह कहां इंगित कर रहा था। जवाब जो सीधे चलते हैं reflogवे सिर्फ ओवरकिल हैं।
रोमेनैवलेरी

5

स्थानीय रूप से यह सब करना सुनिश्चित करें, और बिटकोबेट क्लाउड पर धकेलने से पहले अपनी रेपो स्थिति की पुष्टि करें। अपने वर्तमान रेपो का क्लोन बनाना और पहले इन समाधानों का परीक्षण करना भी एक अच्छा विचार हो सकता है।

  1. यदि आपने शाखा को हटा दिया है, तो आपको अपने टर्मिनल में कुछ इस तरह दिखाई देगा:
    Deleted branch <your-branch> (was <sha>)

2. शाखा को बहाल करने के लिए, उपयोग:

    git checkout -b <branch> <sha>

यदि आपको अपने सिर के ऊपर से 'शा' नहीं पता है, तो आप कर सकते हैं:

  1. अपनी डिलीट की गई शाखा के सिरे पर कमेंट के लिए 'शा' खोजें:
    git reflog
  1. शाखा को पुनर्स्थापित करने के लिए, उपयोग करें:
    git checkout -b <branch> <sha>

यदि आपके कमिट आपके रिफ्लॉग में नहीं हैं:

  1. आप अपनी शाखा को पुनः प्राप्त करने का प्रयास कर सकते हैं जैसे कि एक आदेश का उपयोग करके पाया गया,
    git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt

2. फिर आप इनमें से किसी एक का उपयोग करके प्रत्येक प्रतिबद्ध प्रदर्शित कर सकते हैं:

    git log -p <commit>
    git cat-file -p <commit>

4

हटाई गई शाखा को पुनर्प्राप्त करने के लिए, पहले रिफ्लॉग इतिहास से गुजरें,

git reflog -n 60

जहाँ n अंतिम n को संदर्भित करता है। फिर उचित सिर ढूंढें और उस सिर के साथ एक शाखा बनाएं।

git branch testbranch HEAD@{30}

4

मैंने रिमोट से एक शाखा को हटा दिया, जो मैं नहीं चाहता था कि कुछ कमिट्स को साफ़ करने की कोशिश करने के लिए और जो मुझे चाहिए था, उसे सही करने के लिए जा रहा था। बेशक मैंने SHAs गलत लिखा है ...

यहाँ है कि मैंने उन्हें कैसे पाया (ज्यादातर जवाबों पर चीजों से आसान इंटरफ़ेस / बातचीत):

सबसे पहले, अपने लॉग में ढीले कमिट की एक सूची तैयार करें। इसे जल्द से जल्द करें और काम करना बंद कर दें, क्योंकि कूड़ा उठाने वाले द्वारा डंप किया जा सकता है।

git fsck --full --no-reflogs --unreachable --lost-found > lost

यह एक lostफाइल बनाता है जिसमें आपको सभी कमिट्स को देखना होगा। हमारे जीवन को सरल बनाने के लिए, आइए इसमें से केवल SHA को काटें:

cat lost | cut -d\  -f3 > commits

अब आपके पास एक commitsफाइल है जिसमें सभी कमिट आपको देखने हैं।

मान लें कि आप बैश का उपयोग कर रहे हैं, अंतिम चरण:

for c in `cat commits`; do  git show $c; read; done

यह आपको उनमें से प्रत्येक के लिए अंतर और प्रतिबद्ध जानकारी दिखाएगा। और आप प्रेस करने की प्रतीक्षा करें Enter। अब आप जो चाहते हैं, उसे लिख लें और फिर उन्हें चुन लें। आपके काम हो जाने के बाद, बस उसे Ctrl-C कर दें।


2

बड़ी हाँ

यदि आप GIT का उपयोग कर रहे हैं तो इन सरल चरणों का पालन करें https://confluence.atlassian.com/bbkb/how-to-restore-a-deleted-branch-765757540.html

यदि आप स्मार्टगिट का उपयोग कर रहे हैं और पहले से ही उस शाखा को आगे बढ़ाते हैं, तो उस शाखा को खोजें और राइट क्लिक करें फिर चेकआउट करें


1

सबसे पहले अपने प्रोजेक्ट के लिए इस कदम की तरह जाएं:

cd android studio project
cd Myproject
then type :
git reflog

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


1

टैफ के उत्तर में जोड़कर, आप उल्लिखित इस प्रक्रिया से उबर सकते हैं, जब तक कि यह कमिट नहीं किया जाता है, कचरा एकत्र नहीं किया जाता है। Git शाखा केवल एक विशेष प्रतिबद्ध पेड़ में एक संकेतक है। लेकिन अगर आप पॉइंटर को हटाते हैं, और उस ब्रांच के कमिट को अन्य मौजूदा ब्रांच में मर्ज नहीं किया जाता है, तो गिट इसे कमिंग के रूप में मानते हैं और कचरा संग्रहण के दौरान उन्हें हटा देते हैं, जो कि समय-समय पर स्वचालित रूप से चल सकता है।

यदि आपकी शाखा को किसी मौजूदा शाखा में विलय नहीं किया गया था, और यदि यह कचरा एकत्र किया गया था, तो आप उस समय तक सभी कमिट्स को ढीला कर देंगे, जहां से शाखा को मौजूदा शाखा से निकाला गया था।


1

एक संबंधित मुद्दा: मैं इस पृष्ठ पर "कैसे हटाए गए शाखाओं को जानने के लिए खोज" के बाद आया था।

कई पुरानी शाखाओं को हटाने के दौरान, मुझे लगा कि मैंने गलती से नई शाखाओं में से एक को हटा दिया है, लेकिन इसे पुनर्प्राप्त करने के लिए नाम नहीं जानता।

यह जानने के लिए कि हाल ही में कौन सी शाखाएँ हटाई गई हैं, नीचे करें:

यदि आप अपने Git URL पर जाते हैं, जो कुछ इस तरह दिखाई देगा:

https://your-website-name/orgs/your-org-name/dashboard

फिर आप फ़ीड को देख सकते हैं, क्या हटा दिया गया है, किसके द्वारा, हाल के दिनों में।


ज़रूर। उपरोक्त उत्तर GitHub के लिए है। हमने GitHub को स्थानीय रूप से स्थापित किया। सवाल पूछने के लिए धन्यवाद।
मनोहर रेड्डी पोरडे

1

मैंने यह कंप्यूटर पर किया है जिसे मैं शाखा को हटाता हूं:

git reflog

प्रतिक्रिया:

74b2383 (develope) HEAD@{1}: checkout: moving from master to develope
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{2}: checkout: moving from develope to master
74b2383 (develope) HEAD@{3}: checkout: moving from master to develope
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{4}: reset: moving to HEAD
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{5}: clone: from http://LOCALGITSERVER/myBigProject/Android.git

और मैं इस आदेश के साथ शाखा को पुनः प्राप्त करता हूं:

git checkout -b newBranchName 74b2383


0

सिर्फ इस्तेमाल git reflogकरने shaसे मेरे लिए वापसी नहीं हुई । केवल commit id(जो कि 8 वर्ण लंबा है और एक सा लंबा रास्ता है)

इसलिए मैंने इस्तेमाल किया git reflog --no-abbrev

और फिर जैसा ऊपर बताया गया है वैसा ही करें: git checkout -b <branch> <sha>


आप हमेशा संक्षिप्त 8 वर्ण शा का उपयोग कर सकते हैं, आपको पूर्ण शा का उपयोग करने की आवश्यकता नहीं है
माइकल Dreher

0

यदि आप VSCode का उपयोग कर रहे हैं ... और आपने इसे हटाने से पहले किसी बिंदु पर सर्वर के साथ अपनी शाखा को सिंक किया है ...

ध्यान दें कि जीआईटी शाखा केवल स्थानीय प्रतिलिपि को हटाती है, सर्वर पर प्रतिलिपि नहीं। सबसे पहले, गिट पैनल (बाएं टूलबार पर गिट आइकन), शाखाओं के माध्यम से देखें और देखें कि क्या आपकी शाखा अभी भी "मूल / your_branch_name" के तहत है। यदि ऐसा है, तो बस उसे चुनें और आपको अपना कोड वापस प्राप्त करना चाहिए (सुझाव है कि आप तुरंत कॉपी / पेस्ट करें / इसे कहीं और स्थानीय रूप से सहेजें)।

यदि आपको "मूल / your_branch_name" नहीं दिखाई दिया, तो GitLens एक्सटेंशन इंस्टॉल करें। यह आपको सर्वर रिपॉजिटरी में नेत्रहीन रूप से प्रहार करने की अनुमति देता है और आपके द्वारा सर्वर पर सिंक की गई कॉपी का पता लगाता है। यदि आपके पास कई रिपॉजिटरी हैं, तो ध्यान दें कि GitLens में रिपॉजिटरी को प्रदर्शित करने के लिए वांछित रिपॉजिटरी से कम से कम एक फ़ाइल को खोलना आवश्यक हो सकता है। फिर:

  1. GitLens पैनल खोलें

  2. भंडार का विस्तार करें

  3. आपको श्रेणियों की एक सूची देखनी चाहिए: शाखाएँ / योगदानकर्ता / पदच्युत / चरण / आदि

आपको "शाखाओं" के तहत या संभवतः "रीमोट्स -> मूल" के तहत YourLostTreasure ढूंढना चाहिए। उम्मीद है, आपको वांछित नाम के साथ एक शाखा दिखाई देगी - यदि आप इसका विस्तार करते हैं, तो आपको उस शाखा में परिवर्तित की गई फ़ाइलों को देखना चाहिए। उन्हें खोलने के लिए फ़ाइल नामों पर डबल-क्लिक करें, और तुरंत उस कोड का बैकअप लें।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.