2010-02-27 15 views
12

मैंने अपनी आखिरी प्रतिबद्धता खो दी क्योंकि मैंने गलती से "गिट रीसेट - हार्ड हेड ^" चलाया। नोट: मैं अंत में "^" नहीं रखना चाहता था।खोया अंतिम गिट कमिट

क्या इसे वापस पाने का कोई तरीका है? यह काम :(

+2

किसी भी मामले में, गिट जीसी का उपयोग न करें। इससे अनलिंक किए गए कामों को स्थायी रूप से हटा दिया जाएगा। – Tronic

+0

नहीं, जीसी उस प्रतिबद्धता को तब तक नहीं खोएगा जब तक कि आप अपने काम से बाहर निकलने के लिए गिट के लिए आसान नहीं बनाते (अक्षम या आक्रामक रूप से छंटनी)। कोई भी जिसने अपने हालिया प्रतिबद्धता को खोने के लिए गिट को कॉन्फ़िगर करने के बारे में जानने के लिए पर्याप्त समय बिताया है, कम से कम इस सवाल से नहीं पूछना होगा। डिफ़ॉल्ट रूप से – Dustin

+5

'git gc' अनलिंक किए गए कामों (डिफ़ॉल्ट रूप से) के मामले में 30 दिनों तक रीफ्लॉग में अनलिंक किए गए कामों को नहीं हटाता है। –

उत्तर

25

मुझे लगता है कि this article आप के लिए क्या देख रहे लेख के अनुसार यह है कि, आपके लिए प्रतिबद्ध है "चला गया है," लेकिन नहीं कचरा एकत्र - तरह की Windows में रीसायकल बिन तरह

आप git fsck --lost-found चलाते हैं। 'लटकना प्रतिबद्ध' ढूंढने के लिए, और git reflog के साथ इसे देखें, फिर अपनी वर्तमान शाखा, git merge 7c61179 के साथ लटकती प्रतिबद्धता को मर्ज करें।

+0

धन्यवाद। उसने ऐसा किया मुझे पता था कि यह सिर्फ कुछ जगह पर तैर रहा था, शाखा से अनलिंक था। –

+0

difftool के साथ संयोजन में, मैंने अपनी "खोई गई प्रतिबद्धता" समस्या हल की है: गिट एफएसके - लोस्ट-मिला (लैंडिंग प्रतिबद्ध हैंश प्रदर्शित होते हैं) गिट difftool SOME_HASH कुछ फ़ोल्डर्स/(मैंने सभी खतरनाक कामों की कोशिश की है, जब तक कि मैं 'एक आवश्यक पाया गया है) –

6

के 2 दिन था क्या आप जानते प्रतिबद्ध आईडी (अपने टर्मिनल पर वापस स्क्रॉल करें या git reflog का उपयोग जैसे), तो

git reset --hard 61567de5d9 

कहाँ 61567de5d9 नवीनतम के पहले अंक हैं (खो) के लिए प्रतिबद्ध ।।

21

गिट एक पूर्व राज्य में वापस जाना वास्तव में आसान बनाता है और आपके द्वारा किए गए किसी भी डेटा को खोने से रोकने के लिए बहुत मेहनत करता है। यही कारण है कि आपको अक्सर प्रतिबद्ध करना चाहिए। मुझे git trash कमांड मिला है जो git reset --hard स्थिति करता है, लेकिन एक प्रतिबद्धता लिखने के बाद ताकि मुझे हार्ड रीसेट को पूर्ववत कर दिया जा सके।

हाल के राज्य (यानी आपका सटीक मामला) के लिए, बस आपने जो किया है उसे पूर्ववत करने के लिए git reset --hard ORIG_HEAD करें।

आप एक समय के आधार पर कर सकते हैं रीसेट: git reset --hard '@{5 minutes ago}' खुद एक पूर्व समय के आधार पर राज्य में डालने के लिए (वहाँ आप उदाहरण के लिए, का उपयोग कर सकते बहुत सारे विकल्प, git reset --hard '@{yesterday}' नाटक करने के लिए आज कभी नहीं हुआ हैं)।

अन्यथा, git reflog आउटपुट को उस स्थिति से पहले ढूंढने के लिए ब्राउज़ करें जिसे आप खराब स्थिति में डालते हैं और उस पर रीसेट करें।

+1

अधिक सामान्य आप 'ORIG_HEAD' के बजाय' @ {1} ', या' HEAD @ {1} 'का उपयोग कर सकते हैं। –

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