रोलबैक टू लास्ट गिट कमिट


120

मैंने अभी किया

git commit -m "blah"

फिर मैंने कुछ फाइलें जोड़ीं, मैं कैसे रोलबैक करूं और हटा दूं कि मेरी वर्तमान फाइलों में क्या है जो अभी तक जोड़ा / प्रतिबद्ध नहीं है?


15
नहीं, यह वह नहीं है जो ओपी पूछ रहा है - यह स्पष्ट है कि वह आखिरी कमिट में रोलबैक करना चाहता है, न कि आखिरी प्रतिबद्ध। उन्होंने यह नहीं कहा कि उन्होंने कुछ फाइलें जोड़ीं और फिर उनकी तारीफ की। स्पष्ट रूप से वह अंतिम वचन चाहता है।
पॉल

1
इस सुपर कॉमन सवाल का जवाब खोजना बहुत मुश्किल है
सैम

जवाबों:


211

कैविट एम्प्टर - विनाशकारी आगे की आज्ञा।

शमन - git reflog जरूरत पड़ने पर आपको बचा सकता है।


1) पूर्ववत स्थानीय फाइल परिवर्तन और रखने अपने पिछले प्रतिबद्ध

git reset --hard

2) पूर्ववत स्थानीय फाइल परिवर्तन और निकालें अपने पिछले प्रतिबद्ध

git reset --hard HEAD^

3) रखने स्थानीय फाइल परिवर्तन और निकालें अपने पिछले प्रतिबद्ध

git reset --soft HEAD^

20
यह आदेश आपकी पिछली प्रतिबद्धताओं को हटा देगा, इसलिए सावधानी के साथ उपयोग करें! git reset --hard अधिक सुरक्षित है
rudivonstaden

9
डब्ल्यूटीएफ 36 अप वोट के साथ सही उत्तर के रूप में ऐसा कर रहा है। मैंने अभी इस पर काम करने में एक दिन गंवा दिया है ... क्योंकि मैंने जवाब पढ़ा टिप्पणी नहीं। यह सवाल का सही जवाब नहीं है!
क्रिस नेविल

1
ठीक है सब खो नहीं है! आप रीफ्लिट कर सकते हैं इससे आप रीसेट से पहले किए गए कमिट्स को देख पाएंगे। फिर आप उन कमिटों की जांच कर सकते हैं
क्रिस नेविल

3
इसके लायक होने के लिए, मैंने ओपी के प्रश्न की व्याख्या की थी कि "मैं कमिटमेंट कैसे रोलबैक करूं और वर्तमान फ़ाइलों को हटा दूं", लेकिन यह अस्पष्ट था। मुझे अलग तरह से समझ में आता अगर ओपी ने कहा था कि "मैं उन मौजूदा फाइलों को कैसे
हटाऊं

2
Git एलन केस का कथन है कि साधारण चीजें सरल होनी चाहिए, जटिल चीजें संभव होनी चाहिए। ... खासकर इसके पहले भाग की। फिर भी, आपके उत्तर के लिए धन्यवाद। यह मदद करता है।
0xC0000022L

46

यदि आप नई जोड़ी गई सामग्री और फ़ाइलों को हटाना चाहते हैं, जो पहले से ही मंचित हैं (इसलिए अनुक्रमणिका में जोड़ा गया) तो आप उपयोग करते हैं:

git reset --hard

यदि आप अपनी नवीनतम कमिट को भी हटाना चाहते हैं (संदेश "ब्लाह" के साथ है) तो उपयोग करने के लिए बेहतर है:

git reset --hard HEAD^

अनट्रैक की गई फ़ाइलों को हटाने के लिए (इसलिए नई फ़ाइलों को अभी तक इंडेक्स में नहीं जोड़ा गया है) और फ़ोल्डर्स का उपयोग करें:

git clean --force -d

क्या रीसेट रीसेट - HEAD ^ मेरी नवीनतम प्रतिबद्ध को स्थायी रूप से हटा दें? जैसे मैं इसमें वापस नहीं जा सकता?
user137717

ऐसा लगता है कि "git clean --force -d" भी .गित फ़ोल्डर हटा देता है
Alexey Timokhin

15

git reset --hard काम करने वाली निर्देशिका को अंतिम प्रतिबद्ध करने और नई / परिवर्तित फ़ाइलों को हटाने के लिए मजबूर करेगा।


2
ऐसा किया है, लेकिन फ़ाइलें अभी भी वहाँ हैं। (अनटैक फाइल्स अभी भी हैं)
ब्लेंकमैन

इस मामले में आप
जैकट्रेड

3
अपवित्र क्योंकि यह ओपी के स्पष्ट और असंदिग्ध प्रश्न का एकमात्र स्पष्ट और असंदिग्ध उत्तर है।
पॉल

4

आप git revert HEAD^अगले-से-अंतिम प्रतिबद्ध पर वापस जाने के लिए उपयोग करके एक कमिट वापस कर सकते हैं। आप HEAD ^ के बजाय आईडी का उपयोग करके वापस लौटने के लिए प्रतिबद्ध भी निर्दिष्ट कर सकते हैं


यह उस अर्थ में "वापस" नहीं करता है जो आप कह रहे हैं। यह रिवर्स-कमिट बनाता है।
स्टीफन केंडल

4

यदि आप अंतिम प्रतिबद्ध उपयोग को केवल अनसुना करना चाहते हैं:

git reset HEAD~

मेरे लिए आकर्षण की तरह काम करते हैं।


2
इस सवाल का सटीक जवाब है
डेनिज़ कोकाबोआ

यह स्वीकृत उत्तर होना चाहिए
अमीबा

3

यूएनडीओ स्थानीय फ़ाइल में बदलाव का एक आसान तरीका है, क्योंकि अंतिम प्रतिबद्धता उन्हें एक नई शाखा में रखना है:

git branch changes
git checkout changes
git add .
git commit

यह नई शाखा में परिवर्तन छोड़ देता है। इसे अंतिम शाखा में वापस लाने के लिए मूल शाखा पर लौटें:

git checkout master

नई शाखा मूल शाखा को गड़बड़ाने के जोखिम के बिना परिवर्तनों को वापस करने के लिए विभिन्न तरीकों का अभ्यास करने के लिए एक अच्छी जगह है।

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