2011-04-04 13 views
34

मैं अपने सॉफ्टवेयर विकास के लिए गिट का उपयोग करने की कोशिश कर रहा हूं। मैंने पाया कि अगर मैं गिट में एक शाखा हटा देता हूं, तो मैं हमेशा अपना कोड खो सकता हूं। उसने मुझे आश्चर्यचकित कर दिया। मैंने एक संस्करण नियंत्रण प्रणाली के रूप में सोचा, यह मुझे अपने काम को नुकसान पहुंचाने के बारे में चिंता किए बिना कुछ भी (यहां तक ​​कि बेवकूफ) करने में सक्षम होना चाहिए।मैं हटाई गई शाखा को गिट में कैसे प्राप्त करूं?

नीचे दिए गए चरणों

मैं क्या किया हैं:

  1. एक Git भंडार प्रमाणित करें।
  2. भंडार में कई बदलाव करते हैं।
  3. स्विच/चेकआउट वर्तमान कार्य निर्देशिका को पहले प्रतिबद्ध करने के लिए।
  4. मास्टर शाखा हटाएं।
  5. तो मैंने अपने सभी कार्यों को खो दिया और मैंने जो देखा वह मुझ पर विश्वास नहीं कर सकता। क्या यह असली है? कोडिंग करते समय मैं नशे में हूं। मैं गिट में कोड खो सकता था।

प्रश्न यह है कि मैं शाखा को हटाने की कार्रवाई कैसे कर सकता हूं? या, मैं गिट में सभी इतिहास कैसे प्राप्त कर सकता हूं, यहां तक ​​कि लॉग में गायब हो गया कुछ भी?

+1

यदि आपने कहा कि यह अभी भी होगा, तो गिट रीफ्लॉग –

+1

देखें, मुझे आशा है कि, जब भी आप नशे में हों, तो आप फिर से अपनी मास्टर शाखा को हटा नहीं पाएंगे! – Cascabel

+3

एक और युक्ति: केवल 'गिट शाखा-डी' का उपयोग करें, न कि 'गिट शाखा-डी'। आपको चेतावनी दी जाएगी कि अगर आप ऐसा कुछ खोने वाले हैं जो आपको काम खो देता है, तो आप '-D' का उपयोग करने से पहले सोचने के लिए एक सेकंड ले सकते हैं। (या, आप 'gitk' से हटा सकते हैं ताकि आप वास्तव में देख सकें कि आप क्या हटा रहे हैं।) – Cascabel

उत्तर

62

टिप्पणी में Jefromi सलाह पहली जगह में समस्या से बचने के,:

एक और टिप: केवल git branch -d, नहीं git branch -D का उपयोग करें।
आपको चेतावनी दी जाएगी कि अगर आप ऐसा कुछ खोने वाले हैं जो आपको काम खो देता है, तो आप -D का उपयोग करने से पहले सोचने के लिए एक सेकंड ले सकते हैं।
(या, आप gitk से हटा दें ताकि आप वास्तव में आप हटाई जाने वाली चीज़ों को देखते हैं। जा सकते हैं)

-d 

एक शाखा को हटा दें।
शाखा को अपनी अपस्ट्रीम शाखा में पूरी तरह से विलय किया जाना चाहिए, या HEAD में --track या --set-upstream के साथ कोई अपस्ट्रीम सेट नहीं किया गया था।


लेकिन अगर आप अपने काम "हार" था, many blogsabout reflog में से एक को देखने के (के रूप में James Kyburz टिप्पणी में पता चलता है):

Git reflog to the rescue:

वापस सूची में Git reflog बचाव सितम्बर 09, 2010 - क्रिस स्लॉन द्वारा लिखित | 0 टिप्पणियां »

दूसरे दिन, मैं अपनी वर्तमान शाखा रणनीति का उपयोग करके रियल ट्रैवल की सुविधा पर काम कर रहा था जिसमें हम प्रत्येक रिलीज एक अलग शाखा है।
यह सुनिश्चित नहीं है कि देर से घंटों से नींद की कमी का कारण था, लेकिन मैंने रिलीज के लिए इसे मास्टर शाखा में वापस विलय करने से पहले गलती से शाखा की अपनी स्थानीय और दूरस्थ प्रति हटा दी।
काम के घंटों को खोने के मेरे सिर के माध्यम से सदमे और विचारों की एक त्वरित स्थिति के बाद, मैं शांत हो गया और मेरे गिट ज्ञान पर भरोसा किया।
अपना पूरा प्रतिबद्धता इतिहास पढ़ना:

गिट में प्रतिबद्धता इतिहास को पढ़ने के दो तरीके हैं। पहला तरीका विवरणों की एक सूची दिखाता है जबकि दूसरा वर्तमान HEAD के संदर्भ में लॉग दिखाता है।

// log of detailed commits by users 
$> git log 

// reference log compared to the current HEAD 
$> git reflog 

reflog आदेश का उपयोग करना, मैं पता लगाने के लिए वास्तव में, जहां मेरे नष्ट कर दिया शाखा करने के लिए पिछले संदर्भ था सक्षम था।
reflog का एक उदाहरण उत्पादन इस प्रकार दिखाई देंगे:

c7f3d98 [email protected]{0}: commit: Merged in some code 
f5716c8 [email protected]{1}: pull : Fast-forward 
d93c27b [email protected]{2}: commit: Added some items to project 
... 

अब reflog नहीं दिखाया जाएगा कहां शाखा नष्ट कर दिया गया है, लेकिन अगर आप को याद अपने अंतिम कि शाखा के लिए प्रतिबद्ध है और एक है विस्तृत संदेश विस्तृत, यह ढूंढना और बहाल करना आसान होना चाहिए।

अपनी शाखा को पुनर्स्थापित करना सीधे उस नई जांच को देखकर सीधे है जो आप एक नई शाखा चाहते हैं।

$> git checkout -b my_new_branch [email protected]{5} 

तुम भी बहुत हैश का उपयोग नई शाखा चेकआउट करने के लिए कर सकते हैं।

$> git checkout -b my_new_branch d93c27b 

काफी सरल और अब मैं वास्तव में हटाए जाने से पहले में शाखा को मर्ज करने पर स्थानांतरित कर सकते हैं।

+1

यह याद रखना अच्छा होता है कि आपको याद रखना होगा कि आपकी शाखा पर आखिरी प्रतिबद्धता क्या थी, लेकिन मैंने गलती से कई स्थानीय शाखाएं हटा दीं, और मैं ** * *** याद रखें कि आखिरी प्रतिबद्धता उन सभी पर क्या थी, इसलिए मैं सचमुच 391 खतरनाक कामों के माध्यम से निकल रहा हूं और यह पता लगाने के लिए कि किस शाखा पर प्रतिबद्ध था:/यदि आप जानना चाहते हैं कि मैंने कैसे हटाया कई शाखाएं, 'गिट फ़ेच --प्रून अपस्ट्रीम + रेफ/हेड/*: रेफ/हेड/* 'खतरनाक है:/ –

+0

मैंने वास्तव में' गिट 'की टेक्स्ट खोज करके मेरी एकाधिक शाखा हटाने की समस्या को हल किया हटाए गए शाखाओं के नामों के लिए रीफ्लॉग करें, जो मेरे पास अभी भी है ... तो "कैमल और गिट रिफ्लॉग रखें!" ;) –

+0

@ कूपके ने अच्छी तरह से किया :) – VonC

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