2009-11-10 17 views
11

में प्रमुख^बाहर की जाँच ठीक करते हैं ठीक है तो मैं अपने प्रोजेक्ट में कुछ बदलाव है कि एक बड़ी गंदगी के परिणामस्वरूप बना दिया। मैं पहले से ही परिवर्तन की थी तो मैं बाद में इसे वापस करने के लिए जा सकते हैं, और फिर से इस्तेमाल किया Git चेकआउट HEAD^चेकआउट करने के लिए पिछले प्रतिबद्ध। अब के रूप में मैं अपने प्रोजेक्ट के लिए प्रतिबद्ध बना रही हूँ यह पता चलता है SHA-1 काम कर शाखा (मास्टर के बजाय)मैं कैसे Git

मैं सब कुछ पता नहीं है के रूप में कमांड लाइन पर वहाँ Git के बारे में पता है, लेकिन मेरा अनुमान है कि हेड अभी भी मेरी टूटी हुई प्रतिलिपि को इंगित कर रहा है क्योंकि मैं एक स्पर्शरेखा में जा रहा हूं और समस्या का समाधान कर चुका हूं। मैं उन नवीनतम प्रतिबद्धताओं के लिए हेड को कैसे इंगित कर सकता हूं जिनसे मैं काम कर रहा हूं?

मेरा अनुमान है कि यह रिबेस से कोई लेना देना नहीं है, लेकिन मैं 100% यकीन नहीं है।

धन्यवाद।

उत्तर

23

अब के रूप में मैं अपने प्रोजेक्ट के लिए प्रतिबद्ध बना रही हूँ यह पता चलता है SHA-1 काम कर शाखा (मास्टर के बजाय)

इस रूप में कमांड लाइन पर शायद मतलब है कि आप एक "अलग हेड" है। एक अलग सिर बिंदु सीधे एक शाखा को इंगित करने के बजाय प्रतिबद्ध करने के लिए बिंदु (जो तब एक प्रतिबद्धता को इंगित करता है)। एक अलग सिर एक अनाम शाखा की तरह है।

यह स्थिति git checkout HEAD^ कमांड के कारण HEAD^ के रूप में एक शाखा नाम के लिए एक प्रतिबद्धता को संदर्भित करती है। आप शायद करना चाहता था git reset --hard HEAD^ - जबकि मास्टर अभी भी सक्रिय शाखा करने वाली (यह अभी भी डिस्क पर मौजूद हैं और जब तक reflog में अपने प्रवेश की समय सीमा समाप्त reflog माध्यम से पहुंच योग्य होगा) ड्रॉप सबसे हाल ही में मास्टर से प्रतिबद्ध था ।

मैं कैसे HEAD नवीनतम को इंगित कर सकते प्रतिबद्ध मैं से काम कर रहा हूँ?

HEAD हमेशा वह प्रतिबद्धता है जिससे आप काम कर रहे हैं, चाहे वह अलग हो या नहीं।

तुम्हारा मतलब हैं, "मैं गुरु कैसे इंगित कर सकते हैं नवीनतम के लिए प्रतिबद्ध रहा से काम कर रहा हूँ?", तो वह पूछ रूप में ही है "मैं मास्टरHEAD को इंगित करने के लिए कैसे मिल सकता है?"।जवाब

git branch -f master HEAD 

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

git checkout master 
दो आदेशों के बजाय

ऊपर, आप HEAD पहले, तो इन लगातार दो आदेशों के साथ मास्टर रीसेट पुनः अनुलग्न कर सकते हैं:

git checkout master   # reattach, commit at HEAD is now the unwanted commit 
git reset --hard [email protected]{1} # reset master to the commit at HEAD before the prior command 

[email protected]{1} अंकन reflog में प्रविष्टियों का उपयोग किया जाता है। इस उदाहरण का मतलब है कि "पिछले HEAD" (यानी HEAD पर प्रतिबद्धता HEAD प्रभावित होने वाले सबसे हालिया ऑपरेशन से पहले ")।

+1

गहराई से जाने के लिए धन्यवाद। –

3
git checkout HEAD 
git reset HEAD^ 

यह सबसे हालिया प्रतिबद्धता को मिटा देगा। पुष्टि करें कि यह svn log के साथ काम करता है।

मैंने देखा आप इस Git-SVN टैग किया। यह केवल तभी काम करेगा यदि आपने अभी तक svn पर गड़बड़ कर दिया है। यदि आप हैं, आप गड़बड़ ऊपर इस तरह प्रतिबद्ध के एक रिवर्स मर्ज लागू करने के लिए की आवश्यकता होगी:

$ git log 
commit 30480f327040f812cb2afffdd1cdd374bf26fe83 
Author: you 
Date: today 

    messed up commit 

$ git revert 30480f327040f812cb2afffdd1cdd374bf26fe83 

जहां 30480f327040f812cb2afffdd1cdd374bf26fe83 में गड़बड़ करने के हैश है।

1

मुझे लगता है कि आप देख रहे हैं git reset है:

git checkout HEAD 
git reset --hard HEAD^ 

यह "मास्टर" वापस एक संशोधन के वर्तमान प्रधान से पहले का समय लगेगा। क्या आप इस समय के साथ काम कर रहे हैं एक "अलग सिर" कहा जाता है, क्योंकि यह एक प्रतीकात्मक इसके साथ जुड़े नाम नहीं है।