फ़ाइलों को सहेजना और "git में कोई शाखा नहीं" से आता है


11

मैंने कुछ फाइलों पर काम करना शुरू कर दिया जो मेरे पास एक अन्य परियोजना के तहत गिट सबमॉड्यूल में थी। हालाँकि, चूंकि यह गिट सबमॉड्यूल था, इसने कभी भी "मास्टर" की जाँच नहीं की और इसके बजाय सिर्फ सिर की जाँच की और फ़ोल्डर की सभी फाइलों को "नो ब्रांच" में रखा।

अब जब मैंने इन फ़ाइलों के दुर्घटना के कारण कुछ बदलाव किए हैं, तो मुझे एहसास हुआ कि मैं "प्रोजेक्ट नहीं" में काम कर रहा था, मेरे प्रोजेक्ट का सबमॉड्यूल।

मैं उन फ़ाइलों को एक शाखा (मास्टर की तरह) में कैसे प्राप्त कर सकता हूं ताकि मैं उन्हें बचा सके?

जवाबों:


28

आप git reflog"खोया" कमिट ढूंढने के लिए उपयोग कर सकते हैं :

$ cd submodule_dir
$ git reflog          # Find the commit
$ git checkout master
$ git cherry-pick $SHA_OF_MISSING_CMMIT

हाँ, यह बहुत अच्छा काम किया! सिवाय एक git merge $COMMIT_SHAबार करने के बाद मैं दूसरी शाखा में था।
Xeoncross

3

"कोई शाखा नहीं" स्थिति को एक अलग हेड कहा जाता है। इसे यह कहा जाता है क्योंकि HEAD रेफरी किसी भी शाखा से जुड़ा नहीं है, इसके बजाय यह सीधे एक कमिट में इंगित करता है। HEAD को उस शाखा से जोड़ने के लिए जो वर्तमान HEAD कमिट का उपयोग करती है git checkout -b branchname

आप इस क्रम के साथ HEAD में शामिल करने के लिए एक मौजूदा शाखा को सुरक्षित रूप से अपडेट कर सकते हैं:

git branch temp
git checkout branchname
git merge temp
git branch -d temp

या, HEAD@{1}अस्थायी रूप से, अस्थायी शाखा बनाने से बचने के लिए रिफ्लेग नोटेशन का उपयोग करते हुए:

git checkout branchname
git merge HEAD@{1}

अस्थायी शाखा का उपयोग करना एक अच्छा विचार होगा यदि आप तुरंत मर्ज नहीं करने जा रहे हैं।

यदि आप एक मौजूदा शाखा को जबरन अधिलेखित करना चाहते हैं तो HEAD में कमिट टू प्वाइंट का उपयोग कर सकते हैं git branch -f branchname && git checkout branchname। यदि HEAD में प्रतिबद्धता ब्रांचनाम की वर्तमान टिप पर आधारित नहीं है, तो इसका परिणाम ब्रांचनाम में एक गैर-फास्ट-फॉरवर्ड परिवर्तन होगा, जिसे आप आमतौर पर बचना चाहते हैं (इसे पुनर्लेखन इतिहास के रूप में देखा जाता है)।


ध्यान दें कि यह उत्तर मानता है कि HEAD अभी भी अंतिम प्रतिबद्ध की ओर इशारा कर रहा है, जो एक शाखा पर नहीं है। यदि आपने तब से हेड को स्थानांतरित कर दिया है और केवल अब एहसास हुआ कि क्या हुआ है, तो आपको रिफ्लॉग में उस खोई हुई वस्तु को देखने की आवश्यकता हो सकती है (मिपाडी का उत्तर देखें)।
लार्श

1

पिछले उत्तरों में जोड़ने के लिए:

जब आप अभी भी एक अलग हेड पर हैं, तो आप एक टैग जोड़ सकते हैं:

git tag <some-tag>

यह कमिट में एक टैग जोड़ेगा , जो इसे gitkऔर अन्य टूल में दिखाई देगा ।

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