2010-03-12 9 views
30

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

मैंने undoing rebase के बारे में प्रश्न देखा है, लेकिन यह मेरे लिए सभी ग्रीक है, मुझे रीफ्लॉग दिखाई देता है, लेकिन मुझे नहीं पता कि रिबेस से पहले शाखा को किस प्रतिबद्धता से जोड़ा गया था।

किसी भी मामले में, मुझे वास्तव में रीबेज को पूर्ववत करने की आवश्यकता नहीं है, मैं बस दो फ़ाइलों में परिवर्तनों को पुनर्प्राप्त करने में सक्षम होना चाहता हूं। क्या यह ठीक से करने के लिए वैसे भी है (इस में असफल रहा, मुझे बस अपने भंडार के कल के बैकअप को पुनर्स्थापित करना होगा और बिट्स को हाथ से बाहर ले जाना होगा)।

उत्तर

35

सबसे पहले, अपने गिट काम करने वाले फ़ोल्डर का टैरबॉल बनाएं। इससे कई बार कोशिश करना आसान हो जाता है।

मान निम्नलिखित हुआ

  • Git चेकआउट एक और पुरानी शाखा
  • Git
  • कुछ समस्या (जो आपके द्वारा छोड़े गए)

rebase मास्टर इस बिंदु आप अब कर रहे हैं पर चलें अभी भी एक और पुरानी शाखा में और आपका रिफ्लॉग आपको दिखाता है:

6f8348f [email protected]{0}: rebase: <commit message of last commit in another-old-branch> 
e547ec0 [email protected]{1}: checkout: moving from another-old-branch to e547ec0d2a558d189464fc57192066b34ec5f28f^0 
65cedf8 [email protected]{2}: checkout: moving from master to another-old-branch 

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

हमारे मामले में है कि e547ec0d2a558d189464fc57192066b34ec5f28f था 'हे Git, एक और पुरानी शाखा e547ec0d2, बाकी सब जो कुछ हुआ भूल है', तो हम अब क्या करना है

  • Git चेकआउट another- है पुराने शाखा # अगर आप पहले से ही वहाँ
  • Git नहीं हैं --hard e547ec0d2a558d189464fc57192066b34ec5f28f रीसेट

अब अपनी शाखा सामान्य करने के लिए वापस आ गया है। और आप अपना रिबेस पुनः प्रयास कर सकते हैं।

कृपया ध्यान दें कि आपका रेफ्लॉग अब उदाहरण के मुकाबले थोड़ी अधिक जटिल है। लेकिन इसे कहीं कहीं ले जाना चाहिए ...

शुभकामनाएं!

+1

नहीं, मुझे पुनर्प्राप्त करने की कोशिश करते समय कुछ और खराब कर दिया होगा। अगली बार के लिए चिह्नित उत्तर ... – Benjol

+8

+1; एक और युक्ति: 'गिट लॉग-जी' रीफ्लॉग ब्राउज़ करने का एक अच्छा तरीका हो सकता है। –

+2

एक आकर्षण की तरह काम किया! बस मेरी सुबह बचाओ धन्यवाद – kmanzana

संबंधित मुद्दे