मैं एक आकस्मिक गिट पुश -f से कैसे उबर सकता हूं?


13

मैं बस git push -fगलती से भाग गया, इस प्रकार एक दूरस्थ शाखा को ओवरराइट कर रहा हूं ।

मूल:

(remote origin:)
    branch master -> commit aaaaaaa
    branch foo    -> commit bbbbbbb

(local)
    branch master -> commit ccccccc
    branch foo    -> commit ddddddd

के बाद git push -f:

(remote origin:)
    branch master -> commit ccccccc
    branch foo    -> commit ddddddd

अपने स्थानीय भंडार में, मैं पर काम कर रहा हूँ masterशाखा, इसलिए मैं शाखा बहाल कर सकते हैं masterप्रतिबद्ध करने के लिए aaaaaaa, क्योंकि मैं प्रतिबद्ध प्राप्त कर सकते हैं aaaaaaaसे git reflog। हालाँकि, मैं प्रतिबद्ध नहीं हो सका bbbbbbbक्योंकि मैंने पहले नहीं खींचा था git push -f

मैंने git reflogरिमोट रिपॉजिटरी में कोशिश की है, लेकिन नंगे रिपॉजिटरी में रिफ्लग में कुछ भी उपयोगी नहीं है।

मैं दूरस्थ रिपॉजिटरी में fooप्रतिबद्ध करने के लिए शाखा को कैसे पुनर्स्थापित कर सकता हूं bbbbbbb?

(PS मुझे इसका वास्तविक मूल्य नहीं पता है bbbbbbb)


लेकिन रिमोट रेपो एक नंगे रेपो है।
शी जे --लई

जवाबों:


12

इसे इस्तेमाल करे:

  1. SSH पर रिमोट से कनेक्ट करें।

  2. संपूर्ण दूरस्थ रिपॉजिटरी का बैकअप बनाएं।

    tar cvzf project-backup.tgz /path/to/project.git
    
  3. यदि आप कम से कम पहले कुछ अक्षर जानते हैं bbbbbbb, तो उपयोग करें git show bbbbbbऔर / या git log bbbbbbपूर्ण वचन हैश का पता लगाएं। (यदि आपको केवल हैश की आवश्यकता है, तो git rev-parse bbbbbbयह भी काम करेगा, लेकिन जांच करना हमेशा बेहतर होता है।)

    आप मूल्य पता नहीं है सब पर , चलाने git fsckऔर आप "झूलते प्रतिबद्ध" की एक सूची मिलना चाहिए। प्रत्येक प्रतिबद्ध का उपयोग करके जांच करें git show <hash>और git log <hash>जब तक आपको सही न मिले।

  4. शाखा संदर्भ अपडेट करें:

    echo aaaaaaaaaaaaaaa.... > refs/heads/master
    echo bbbbbbbbbbbbbbb.... > refs/heads/foo
    
  5. का प्रयोग करें git log masterऔर git log fooसुनिश्चित करें कि आप सही शाखाओं को बहाल किया।


धन्यवाद, मैंने झूलने वाली शाखा को बचा लिया था git fsck
शी जे --लई

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