स्थानीय शाखा को पूर्ववत हटाएं


375

मैंने अभी कुछ प्रयोगात्मक परिवर्तनों के साथ गलत शाखा को हटा दिया है जिनकी मुझे आवश्यकता है git branch -D branchName

मैं शाखा कैसे पुनर्प्राप्त करूं?


7
मुझे खुशी है कि मैं अकेला लंगड़ा-ओ नहीं हूं, जिसने ऐसा किया (और नियमित रूप से एक कॉपी को आगे बढ़ाने के लिए भूल गया)
रे

जवाबों:


717

आप शाखा के आखिरी कमेटी के SHA1 को खोजने के लिए git reflog का उपयोग कर सकते हैं । उस बिंदु से, आप का उपयोग करके एक शाखा को फिर से बना सकते हैं

git branch branchName <sha1>

संपादित करें: जैसा कि @seagullJS कहता है, branch -Dकमांड आपको sha1 बताता है, इसलिए यदि आपने टर्मिनल बंद नहीं किया है, तो यह वास्तविक आसान हो जाता है। उदाहरण के लिए यह हटाता है और फिर तुरंत नाम की एक शाखा को पुनर्स्थापित करता है master2:

user@MY-PC /C/MyRepo (master)
$ git branch -D master2
Deleted branch master2 (was 130d7ba).    <-- This is the SHA1 we need to restore it!

user@MY-PC /C/MyRepo (master)
$ git branch master2 130d7ba

71
Git आपको बताता है कि शाखा हटाए जाने के समय SHA1 क्या था, इसलिए यदि आप इसे हटाते हैं, तो यह कमांड लाइन में कुछ पंक्तियाँ हो सकती है।
सीगुलजेएस

यदि यह शाखा सर्वर पर मौजूद है, तो वैकल्पिक रूप से, आप उपयोग कर सकते हैंgit branch branchName origin/branchName
फ्लोरियन कैस्टेलन

इसके अलावा मैंने शाखा को कमिट करने के लिए git चेरी-पिक <sha1> का उपयोग करते हुए समाप्त किया
अकिन ओकेगबेल

54

यदि आप शाखा के अंतिम SHA1 को जानते हैं, तो आप कोशिश कर सकते हैं

git branch branchName <SHA1>

आप यहाँgit reflog समाधान में वर्णित SHA1 का उपयोग कर सकते हैं ।


34

यदि आपने अभी तक विलोपन को धक्का नहीं दिया है, तो आप बस कर सकते हैं:

$ git checkout deletedBranchName

यह उत्तर Git के एक्सटेंशन को बंद कर देता है "जिस शाखा को आप पुश करने की कोशिश कर रहे हैं वह इस रिमोट के लिए एक नई शाखा है।" बहुत बहुत धन्यवाद।
ओमेर

28

यदि आपने शाखा को हटा दिया है, तो आपको अपने टर्मिनल में कुछ इस तरह दिखाई देगा:

Deleted branch branch_name(was e562d13)
  • जहां e562d13 एक अद्वितीय आईडी है (उर्फ "SHA" या "हैश"), इसके साथ आप हटाए गए शाखा को पुनर्स्थापित कर सकते हैं।

शाखा को पुनर्स्थापित करने के लिए, उपयोग करें:

git checkout -b <branch_name> <sha>

उदाहरण के लिए :

git checkout -b branch_name e562d13 

4

पहला: .IT निर्देशिका सहित अपनी पूरी निर्देशिका का बैकअप लें।

दूसरा: आप git fsck --lost-foundखोए हुए कमिट्स की आईडी प्राप्त करने के लिए उपयोग कर सकते हैं ।

तीसरा: खोए हुए कमिट पर रिबास या मर्ज।

चौथा: हमेशा उपयोग करने से पहले दो बार सोचें -डिट के साथ -फोर्स करें :)

आप इस अच्छी चर्चा को भी पढ़ सकते हैं कि इस तरह की त्रुटि से कैसे उबरें।

संपादित करें: वैसे, चलाएं git gc(या इसे अपने आप चलाने की अनुमति न दें - यानी न चलाएं git fetchऔर न ही ऐसा कुछ) या आप हमेशा के लिए अपने कमिट खो सकते हैं।


1
1 और 4 ओवरमिल IMO हैं।
jwg

हाँ, यही कारण है कि हम git का उपयोग करते हैं, चारों ओर ले जाने से बचने के लिए। आपके द्वारा किया गया हर कार्य अभी भी आपके लिए उपलब्ध है।
mateor

4

धन्यवाद, यह काम किया।

git शाखा new_branch_name sha1

git checkout new_branch_name

// मेरी पुरानी शाखा में फाइलों में मेरी पुरानी जाँच देखी जा सकती है


3

इन कदमों का अनुसरण करें:

1: दर्ज करें:

git reflog show 

यह सभी कमिट इतिहास को प्रदर्शित करेगा, आपको sha-1 का चयन करना होगा जिसमें अंतिम कमिट है जिसे आप वापस प्राप्त करना चाहते हैं

2: आपके द्वारा चयनित शा -1 आईडी के साथ एक शाखा का नाम बनाएँ : 8c87714

git branch your-branch-name 8c87714

0

यह मेरे लिए काम किया:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.