रिमोट Git रिपॉजिटरी को वापस लाना


111

मेरे पास एक रिमोट गिट रिपॉजिटरी है, और मुझे अंतिम nविराम को ठंडे विस्मरण में रोल करने की आवश्यकता है।

जवाबों:


135

आप उपयोग कर सकते हैं git revert <commit>… सभी n कमिट के लिए , और फिर इतिहास को अपरिवर्तित रखते हुए हमेशा की तरह धक्का दे सकते हैं।

या आप के साथ "वापस रोल" कर सकते हैं git reset --hard HEAD~n। यदि आप एक सार्वजनिक या साझा भंडार में धक्का दे रहे हैं, तो आप अपनी मूल शाखा के आधार पर दूसरों के काम को रोक सकते हैं और तोड़ सकते हैं। Git आपको ऐसा करने से रोकेगा, लेकिन आप git push -fअपडेट को बल देने के लिए उपयोग कर सकते हैं ।


5
आप उपयोग करके किसी विशिष्ट कमिट पर रोलबैक कर सकते हैं: git reset --hard [sha1]जहाँ sha1 कमिट हैश पहचानकर्ता है।
पिसरुक

7
आप दूरस्थ रिपॉजिटरी में रीसेट -हार्ड का उपयोग नहीं कर सकते क्योंकि कोई कार्य निर्देशिका नहीं है। मूल प्रश्न केवल यह बताता है कि एक दूरस्थ रेपो है, स्थानीय रेपो का कोई उल्लेख नहीं है।
हज़ोक

2
सिर्फ एक ध्यान दें, git पुश -f सभी स्थानीय शाखाओं को उनके रिमोट में
धकेल देगा

कृपया ध्यान रखें, कि उपयोग करने revertसे आपकी सुविधा शाखाओं को "पहले से ही" मर्ज किया जा सकता है। ऐसा इसलिए क्योंकि इन शाखाओं का वास्तव में विलय किया जा रहा है। लेकिन परिवर्तन वापस किए गए थे। हल: चेरी-पिक या रिवर्ट कमिट
बेनेडिकट

@Benedikt reset --hardभी सुविधा शाखाओं को पहले से ही मर्ज किए जाने का कारण बनता है? मेरी धारणा यह नहीं है (जहां revert) होगा।
मार्कस लियोन

37

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

git push origin old_master:master

या, यदि कोई विशेष SHA1 है (संक्षिप्त रूप में 1e4f99e कहें) तो आप इसे वापस ले जाना चाहेंगे:

git push origin 1e4f99e:master

9

सौभाग्य से मैं पैट नोट्ज़ के समाधान का उपयोग करने की स्थिति में था जिसने पूरी तरह से अवांछित प्रतिबद्ध को हटा दिया। हालाँकि, शुरू में मुझे त्रुटि मिली

error: failed to push some refs to 'ssh://git@gitrepo.git'
To prevent you from losing history, non-fast-forward updates were rejected*

लेकिन बल को जोड़ने ( -f) विकल्प इस त्रुटि को अधिलेखित करता है

git push -f origin 52e36b294e:master

3

यदि आपके पास दूरस्थ रेपो तक सीधी पहुंच है, तो आप हमेशा उपयोग कर सकते हैं:

git reset --soft <sha1>

यह काम करता है क्योंकि गैर-मौजूद कार्यशील निर्देशिका को संशोधित करने का कोई प्रयास नहीं है। अधिक जानकारी के लिए कृपया मूल उत्तर देखें:

मैं एक गीदड़ नंगे रिपॉजिटरी में अंतिम प्रतिबद्ध को कैसे अनफिट कर सकता हूं?


2
क्यों --softजरूरी होगा? आप शायद git resetमोड के झंडे के बिना सिर्फ सादे के साथ एक ही काम कर सकते हैं ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.