2010-08-24 8 views
6

मैं का उपयोग कर branch_a में मेरी कार्यशील निर्देशिका में एक दोस्त के भंडार से एक मास्टर शाखा में विलय कर दिया गया है:गिट: विलय के बाद रीसेट कैसे करें?

git pull my_friend master 

मुझे पता चला है मर्ज किए गए वर्शन में त्रुटियां हैं कि। विकास जारी रखने के लिए मैं विलय से पहले अपने अंतिम प्रतिबद्धता पर वापस जाना चाहता हूं।
मैंने कोशिश की:

git reset --hard HEAD 

लेकिन वह मुझे सही मर्ज करने के बाद वापस राज्य के लिए लाया। (खींच करता आदेश प्रतिबद्ध ?!)
मैं भी करने की कोशिश की:

git revert HEAD 

लेकिन निम्न त्रुटि प्राप्त:

fatal: Commit 2d72d8f367b987d8c16f5cb1a543a6886acdcf83 is a merge but no -m option was given.

मुझे क्या करना चाहिए?

+0

मैंने आपके शीर्षक में 'रीवर्ट' में 'रीसेट' बदल दिया है, क्योंकि रीसेट वह है जिसे आप प्राप्त करने का प्रयास कर रहे थे। –

उत्तर

23

HEAD वर्तमान प्रतिबद्धता (आमतौर पर वर्तमान में चेक-आउट शाखा की नोक) को संदर्भित करता है। आपने पहले से ही अपना विलय कर लिया है, इसलिए HEAD विलय प्रतिबद्धता को इंगित कर रहा है। आपको फिर से, यह पहले प्रतिबद्ध करने के लिए चाहते हैं का उपयोग करें:

git reset --hard HEAD^ 

^ का अर्थ है "के पहले माता-पिता"; एक नियमित प्रतिबद्धता के लिए यह एकमात्र माता-पिता है, और विलय के लिए प्रतिबद्धता यह है कि जब आप विलय करते हैं तो आपने यह चेक किया था (यानी जिस शाखा में आप विलय हो गए थे)।

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

वैसे, revert इसका मतलब यह नहीं है कि आप क्या सोचते हैं (ऐसा लगता है जैसे आप इसे एक svn तरीके से उपयोग कर रहे हैं, हो सकता है? लेकिन मैंने कभी भी svn का उपयोग नहीं किया है)। git revert का उपयोग एक प्रतिबद्धता बनाने के लिए किया जाता है जो रिवर्स डिफ को लागू करके पिछली प्रतिबद्धता को रद्द करता है (उलट देता है)। जब आप एक पिछली प्रतिबद्धता को पूर्ववत करना चाहते हैं तो आप इसे पहले से प्रकाशित कर चुके हैं।

+0

जो लोग हार्ड रीसेट करने की इच्छा नहीं रखते हैं, उनके रूप में @ जेफ्रोमी कहते हैं, 'गिट रिवर्ट' का उपयोग अंतिम प्रतिबद्धता को "पूर्ववत करें" करने के लिए करें, दोनों घटनाओं का इतिहास छोड़ दें। 'गिट रिवर्ट' पर अधिक जानकारी के लिए देखें: [यह उत्तर] (http://stackoverflow.com/a/5971281/1185053) –

2

खींचने के बाद, HEAD को नवीनतम प्रतिबद्धता में स्थानांतरित कर दिया गया है, जो दो शाखाओं को एक साथ लाने में विलय करने वाली प्रतिबद्धता है, न कि जिस प्रतिबद्धता पर आपने पिछली बार काम किया था। तो यही कारण है कि reset HEAD कुछ भी नहीं बदलेगा।

revert HEAD वह नहीं है जो आप करना चाहते हैं, क्योंकि वह विलय प्रतिबद्धता के परिवर्तनों को वापस करने के लिए एक नई प्रतिबद्धता बनाने का प्रयास कर रहा है। (यह वह जगह है तुम क्यों कोई त्रुटि दिखाई देती है, आप वापस नहीं कर सकते हैं किसी मर्ज Git जो दो माता पिता की करता है आप पर वापस आना चाहते बताए बिना करते हैं।)

मुझे लगता है कि क्या आप चाहते हैं:

git reset [--hard] HEAD^ 

जो को विलय प्रतिबद्धता से पहले प्रतिबद्ध करेगा।

2

does pull command commit?

हाँ, ऐसा करता है। पुल fetch और merge पर एक रैपर है।यदि आप विलय से पहले अन्य परिवर्तनों को देखना चाहते हैं, तो आप केवल fetch

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

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