गितुब और स्थानीय स्तर पर अंतिम एन कमिट्स कैसे हटाएं?


127

मैं अपने GitHub रिपॉजिटरी में से एक से अंतिम 2 कमिट्स को हटाने की कोशिश कर रहा हूं। मैं के रूप में सुझाव की कोशिश की है यहां : git push -f origin HEAD^^:master। ऐसा लगता है कि यह काम करता है, क्योंकि अंतिम दो कमिट निकाल दिए जाते हैं।

फिर मैंने उन्हें अपने स्थानीय भंडार से हटा दिया git rebase -i HEAD~2। मैं उन लाइनों को हटाता हूं जो उन कमिट्स से संबंधित हैं, और जांच लें git logकि वे सही तरीके से हटाए गए हैं।

उसके बाद, मैं अपनी स्थानीय रिपॉजिटरी में कुछ बदलाव करता हूं, एक नई प्रतिबद्धता बनाता हूं, और गिटहब को धक्का देता हूं। समस्या यह है कि, मेरे GitHub खाते में, मेरे पास पिछले दो कमिट हैं जिन्हें मैंने हटाने की कोशिश की है।

मुझे लगता है कि समस्या मेरे स्थानीय रिपॉजिटरी में है, क्योंकि अगर मैं अपने स्थानीय पर अपने गिथब रिपॉजिटरी को क्लोन करता हूं और यहां कुछ बदलाव करता हूं, तो जब मैं एक नई प्रतिबद्ध करता हूं तो उन पुराने कमिट्स को गीथहब में धक्का नहीं दिया जाता है।

कोई उपाय?

जवाबों:


199

स्थानीय रूप से अंतिम दो कमिट निकालने के लिए मैं सुझाव दूंगा:

git reset --hard HEAD^^

रिबेस एक पूरी तरह से अलग ऑपरेशन है जो यहां आपकी मदद नहीं करेगा।


23
यदि आपने पहले ही इस परिवर्तन को दूरस्थ रिपॉजिटरी में धकेल दिया है। आप इसे git push -f
Ivan Fernandez

क्या आप इसे अंतिम n संख्या के लिए सामान्यीकृत कर सकते हैं?
user_19

6
@ user_19 आप जैसे काम कर सकते हैं git reset --hard HEAD^4या कर सकते हैं git reset --hard HEAD~4। हालाँकि, अगर आपका इतिहास मर्ज होता है, तो चीजें थोड़ी जटिल हो सकती हैं। आप अनुभाग इसी में संशोधन निर्दिष्ट करने के बारे में अधिक जानकारी पा सकते हैं यहाँ
केएल -7

2
अगर मैं पिछले 7 कमिट्स को हटाना चाहता था तो ?? क्या मुझे HEAD के बाद 7 बार ^ डालने की जरूरत है ... कृपया मुझे स्पष्ट करें
गगन गामी

4
@ गगनगामी, मुझे लगता है कि आप करेंगे git reset --hard HEAD~7, लेकिन अगर मैं गलत हूं तो कृपया मुझे सुधारें।
कोन एंटानकोस

105

यदि आप 2 (दो) पिछले कमिट्स को हटाना चाहते हैं, तो ऐसा करने के लिए एक आसान कमांड है:

git reset --hard HEAD~2

आप 2जितने भी कमिटमेंट हटाना चाहते हैं, उनके लिए आप बदल सकते हैं ।

और इस परिवर्तन को दूरस्थ रूप से धकेलने के लिए, आपको बल ( ) पैरामीटर के git pushसाथ करने की आवश्यकता है :-f

git push -f

हालांकि, मैं अनुशंसा नहीं करते हैं कोई भी कार्य करने के लिए gitके साथ आदेश -fया --hardअगर देखते हैं विकल्प शामिल नई प्रतिबद्ध दूरस्थ (Github) पर के बाद यह करता है कि आप निकालना चाहते हैं। उस मामले में, हमेशा उपयोग करें git revert


क्या मेरे द्वारा किए गए परिवर्तन रुकते हैं?
ज़ुहैर ताहिर

@SymfonyUser, नहीं। जब आपने hardकमांड बनाया था , तो आप इस दो कमिट को ढीला करते हैं। यदि आप परिवर्तनों को सहेजना चाहते हैं, diffतो रीसेट लागू करने से पहले इन कमिट्स की एक फ़ाइल बनाएं ।
धेरिक

3
@ZuhayerTahir अगर आप चाहते हैं बस पूर्ववत करने के लिए प्रतिबद्ध पिछले 5 प्रतिबद्ध के लिए तो बस करना git reset HEAD~5(उपयोग नहीं करते हैं hard)। इस तरह से आप एक चरणबद्ध स्थिति में अपने बदलाव प्राप्त करेंगे (अर्थात प्रतिबद्ध नहीं हैं)। मेरे लिए यह जवाब देखिए ।
हनी

@ आपकी प्रतिक्रिया के लिए धन्यवाद। मैं उसी निष्कर्ष पर पहुंचा।
ज़ुहैर ताहिर

29

निम्नलिखित मेरे लिए काम करता है

git reset HEAD~n

यह nस्थानीय रेपो से अंतिम रूप HEAD^को हटा देता है , क्योंकि केवल एक को हटाता है। यदि आपको रिमोट से इन परिवर्तनों को हटाने की आवश्यकता है, तो आपको पुश को मजबूर करने की आवश्यकता हो सकती है क्योंकि आप रिमोट के पीछे होंगे।

git push -f origin <branch>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.