2012-10-12 28 views
14

मुझे लगता है कि मैंने यहां गड़बड़ कर ली है।पिछली कमिट पर रोलबैक - मैक के लिए गिथब (एक वापसी पहले ही प्रगति पर है)

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

रोलबैक दबाए जाने से पहले, मैंने वर्तमान में बदलाव किए हैं क्योंकि मैं उन्हें खोना नहीं चाहता था। काम करने के बाद (रिमोट पर धक्का नहीं दे रहा), मैंने उस पुरानी प्रतिबद्धता के लिए रोलबैक किया। (ध्यान दें कि प्रतिबद्धता के बीच में कुछ काम करता था जो मैंने समर्थित किया था और जिसे मैंने अभी किया है)।

सभी ने ठीक काम किया और मेरा कोड उस प्रतिबद्धता पर वापस आ गया। उस प्रतिबद्धता में कार्यक्षमता भी गलत व्यवहार कर रही थी इसलिए मैंने अपने सबसे हालिया प्रतिबद्धता पर वापस आने का फैसला किया।

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

error: a cherry-pick or revert is already in progress 
hint: try "git cherry-pick (--continue | --quit | --abort)" 
fatal: revert failed 
(32768) 

अब ऐसा लगता है कि अधिकांश चीजें वापस आ गई हैं लेकिन कोड का वर्तमान संस्करण मेरी आखिरी प्रतिबद्धता के समान नहीं है। यह बीच में कहीं है। = (

क्या मैं गलत क्या किया? [मैं मासूमियत से बाहर नहीं कह रहा हूँ, मैं जानता हूँ कि मैं गलत कर दिया;)]

यह ऐसा करने का सही तरीका क्या था? [मैं मैं पहली बार branched हो जाना चाहिए था लगता है]

उत्तर

17

मैं नहीं जानता कि मैक रोलबैक के लिए क्या GitHub करता है, लेकिन ऐसा लगता है कि आप बेहतर होगा हाथ में इस मुद्दे को हल करने के लिए कमांड लाइन का उपयोग कर होगा:

git cherry-pick --abort - करने के लिए प्रगति

git branch -va में किसी भी चेरी पिकिंग रोक - तुम्हें दिखाता जहां अभी अपने संकेत दिए गए हैं

सुनिश्चित करें कि आपके कार्यशील निर्देशिका साफ है: git status - किसी भी संशोधित या मंचन फ़ाइलें नहीं दिखाने चाहिए

012,

git stash - कुछ भी अभी भी मौजूद संशोधित अगर

git reset --hard your_local_branch github/remote_branch - स्थानीय शाखा राज्य को प्रतिबिंबित के रूप में यह दूरदराज के पक्ष में है या नहीं। जाहिर है कि आपको रीसेट करने की आवश्यकता नहीं है यदि आपकी वर्तमान शाखा रिमोट के समान प्रतिबद्धता को इंगित करेगी। यदि आप अलग-अलग हेड स्टेट में हैं (गिट स्टेटस आपको इसके बारे में बताएगा) तो सामान्य स्थिति में वापस आने के लिए बस अपनी स्थानीय शाखा चेकआउट करें।

अब यह तय करें कि आप वास्तव में हासिल करना चाहते हैं:

मैं दोषपूर्ण से छुटकारा पाने के लिए प्रतिबद्ध?

इंटरैक्टिव रिबेस उपयोग करें और पुष्टि दोषपूर्ण के साथ लाइन निकालें, तब GitHub पर दूरस्थ रेपो को धक्का बल (कहना दोषपूर्ण 10 प्रतिबद्ध पहले हुआ था प्रतिबद्ध)

git rebase -i HEAD~11

द्वितीय। दोषपूर्ण प्रतिबद्धता वापस लाओ? - कुछ अन्य कामों के बाद ऐसा करने की अनुशंसा नहीं की जाएगी, जब तक कि आप पूरी तरह से सुनिश्चित न हों कि निम्नलिखित कार्य कोड के उसी टुकड़े को स्पर्श नहीं करते हैं।यह प्रभावी रूप से

git revert {commit-sha1}

तृतीय पैदा करेगा एक रिवर्स प्रतिबद्ध (अगर लाइन दोषपूर्ण से जोड़ा गया है प्रतिबद्ध यह वापस लाएं और इसके विपरीत द्वारा हटा दिया जाएगा)। दोषपूर्ण प्रतिबद्धता में संशोधन करें? इंटरैक्टिव रीबेस का उपयोग करें, लेकिन इसे संशोधित करने के लिए दोषपूर्ण प्रतिबद्धता को रोकने के लिए निर्देश दें। जब यह परिवर्तन को संपादित करना बंद कर देता है और रिबैजिंग जारी रखता है, तो रिमोट ब्रांच को धक्का दें (समाधान I से रिबेस कमांड का उपयोग करें)

कुछ भी करने के बाद यदि आप कुछ भी कर चुके हैं तो परिवर्तनों को वापस लाने के लिए git stash pop का उपयोग करें।

उम्मीद है कि मदद करता है!

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

  • कोई संबंधित समस्या नहीं^_^