जवाबों:
आप उपयोग कर सकते हैं git revert <commit>… सभी n कमिट के लिए , और फिर इतिहास को अपरिवर्तित रखते हुए हमेशा की तरह धक्का दे सकते हैं।
या आप के साथ "वापस रोल" कर सकते हैं git reset --hard HEAD~n। यदि आप एक सार्वजनिक या साझा भंडार में धक्का दे रहे हैं, तो आप अपनी मूल शाखा के आधार पर दूसरों के काम को रोक सकते हैं और तोड़ सकते हैं। Git आपको ऐसा करने से रोकेगा, लेकिन आप git push -fअपडेट को बल देने के लिए उपयोग कर सकते हैं ।
revertसे आपकी सुविधा शाखाओं को "पहले से ही" मर्ज किया जा सकता है। ऐसा इसलिए क्योंकि इन शाखाओं का वास्तव में विलय किया जा रहा है। लेकिन परिवर्तन वापस किए गए थे। हल: चेरी-पिक या रिवर्ट कमिट ।
reset --hardभी सुविधा शाखाओं को पहले से ही मर्ज किए जाने का कारण बनता है? मेरी धारणा यह नहीं है (जहां revert) होगा।
एल्मर्को सही है ... उनका सुझाव साझा / सार्वजनिक रिपॉजिटरी (या, कम से कम सार्वजनिक शाखाओं) के लिए सबसे अच्छा है। यदि इसे साझा नहीं किया गया था (या आप दूसरों को बाधित करने के लिए तैयार हैं) तो आप किसी विशेष रेफरी को भी धक्का दे सकते हैं:
git push origin old_master:master
या, यदि कोई विशेष SHA1 है (संक्षिप्त रूप में 1e4f99e कहें) तो आप इसे वापस ले जाना चाहेंगे:
git push origin 1e4f99e:master
सौभाग्य से मैं पैट नोट्ज़ के समाधान का उपयोग करने की स्थिति में था जिसने पूरी तरह से अवांछित प्रतिबद्ध को हटा दिया। हालाँकि, शुरू में मुझे त्रुटि मिली
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
यदि आपके पास दूरस्थ रेपो तक सीधी पहुंच है, तो आप हमेशा उपयोग कर सकते हैं:
git reset --soft <sha1>
यह काम करता है क्योंकि गैर-मौजूद कार्यशील निर्देशिका को संशोधित करने का कोई प्रयास नहीं है। अधिक जानकारी के लिए कृपया मूल उत्तर देखें:
मैं एक गीदड़ नंगे रिपॉजिटरी में अंतिम प्रतिबद्ध को कैसे अनफिट कर सकता हूं?
git reset --hard [sha1]जहाँ sha1 कमिट हैश पहचानकर्ता है।