2011-11-04 10 views
5

मैं एक गिट प्रतिबद्ध कैसे "दोबारा खोल सकता हूं?

अस्थिर में (ध्यान दें, मैं जवाब git rebase -i के लिए नहीं देख रहा हूँ), मैं "को फिर से खोलने" कर सकते हैं एक मेरी पैच कतार में आयात करने से प्रतिबद्ध:

hg qimport tip 

प्रतिबद्ध है "खुला" इस अर्थ में कि यह ऐसा करने से पहले जैसा है, मैं वापस कर सकता हूं, hg diff, hg status, आदि। मैं इसे गिट में कैसे कर सकता हूं?

(सब कुछ मैं वेब पर पाया है git rebase -i पता चलता है और फिर संपादित चुनते हैं, लेकिन क्योंकि प्रतिबद्ध "खुले" नहीं है उसी तरह से है कि, अलग है।)

+0

दूसरा विकल्प वहां प्रतिबद्धता छोड़ना है, कुछ और चीजें बदलना है, और फिर उन्हें * प्रतिबद्ध * प्रतिबद्ध करने के लिए उपयोग करें ('git commit --amend')। – Cascabel

उत्तर

16

तुम सिर्फ अपने काम की नकल करने के लिए कोई बदलाव किए बिना अपने सिर सूचक ऊपर बढ़ने की जरूरत है:

git reset --soft HEAD^ 

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

हेड एक "जादू" गिट पॉइंटर है जो हमेशा मौजूदा रेफरी (यानी आपकी कार्यशील प्रतिलिपि के माता-पिता) को इंगित करता है। देखभाल (^) माता-पिता को इंगित करती है। आप इसे बार-बार उपयोग कर सकते हैं, उदा। HEAD ^^ अंतिम प्रतिबद्धता के माता-पिता को संदर्भित करता है।

+0

महान जवाब, धन्यवाद! क्या आप एक नोट बना सकते हैं कि आप प्रतिबद्ध संदेश खो देते हैं, जैसे @ वूलोंग ने किया? –

+0

यदि आप वास्तव में बार-बार इसका उपयोग करना चाहते हैं, तो 'HEAD ^^^^^' 'HEAD ~ 5' जैसा ही है। (और अधिक सटीक, 'HEAD' एक प्रतीकात्मक रेफरी है, जो वर्तमान में चेक-आउट शाखा को इंगित करता है, जो वर्तमान में चेक-आउट प्रतिबद्धता को इंगित करता है, या यदि आप अलग-अलग हेड स्टेट में हैं, तो कोई शाखा चेक नहीं है आउट।) – Cascabel

+3

@ पॉल बिगगर: प्रतिबद्ध संदेश खोने से बचने के बजाय रीसेट करने के बजाय संशोधन करने का एक बड़ा कारण है। अगर आप रीसेट करते हैं, तो आप अभी भी अप्रत्यक्ष रूप से प्रतिबद्ध संदेश पुनर्प्राप्त कर सकते हैं। 'HEAD @ {1} 'पहले चेक-आउट प्रतिबद्धता को संदर्भित करता है, जो (यदि आपने कुछ और नहीं किया है) प्री-रीसेट प्रतिबद्ध होगा। प्रारंभिक स्थान के रूप में आप अपने प्रतिबद्ध संदेश का उपयोग करने के लिए 'गिट प्रतिबद्ध-सी HEAD @ {1}' का उपयोग कर सकते हैं। (यदि आपने तब से हेड को स्थानांतरित कर दिया है, तो आप रिफ्लॉग में आगे की ओर से प्रतिबद्धता को खोजने के लिए 'गिट रीफ्लॉग' का उपयोग कर सकते हैं।) – Cascabel

2

मान लिया जाये कि आप अभी तक नहीं किया है आपके रिमोट रिपॉजिटरी को धक्का दिया, git reset --soft HEAD^ आपके प्रतिबद्ध संदेश को खोने के खर्च पर आपकी आखिरी प्रतिबद्धता को फिर से खोल देगा।

2

आप git commit --amend का उपयोग कर एक ही परिणाम प्राप्त कर सकते हैं।

& गिट के बीच comparison chart देखें।

1

स्कॉट चेकॉन ने (आश्चर्यजनक रूप से) 'गिट रीसेट' कमांड के बारे में विस्तृत किया है: http://progit.org/2011/07/11/reset.html इसे देखने में संकोच नहीं करें।

+0

महान संदर्भ! –

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