इससे निपटने के दो तरीके हैं। जो आसान है वह आपकी स्थिति पर निर्भर करता है
रीसेट
यदि आप जिस कमिटमेंट से छुटकारा पाना चाहते हैं, वह आखिरी कमिटमेंट था, और आपने कोई अतिरिक्त काम नहीं किया है, जिसका आप आसानी से उपयोग कर सकते हैं git-reset
git reset HEAD^
अपनी वर्तमान HEAD से ठीक पहले अपनी शाखा को वापस प्रतिबद्ध कर लेता है। हालाँकि, यह वास्तव में आपके काम के पेड़ में फ़ाइलों को नहीं बदलता है। नतीजतन, उस बदलाव में जो बदलाव हुए, वह संशोधित हुए - एक 'अनलमिटी' कमांड की तरह। वास्तव में, मेरे पास ऐसा करने के लिए एक उपनाम है।
git config --global alias.uncommit 'reset HEAD^'
तब आप git uncommit
भविष्य में सिर्फ एक कमिट का सहारा ले सकते हैं।
कुचलने
कमिट करने का मतलब है दो या दो से अधिक का संयोजन। मैं अक्सर ऐसा करता हूं। आपके मामले में आपके पास एक आधा किया हुआ फीचर शुरू हो गया है, और फिर आप इसे समाप्त कर देंगे और फिर से उचित, स्थायी संदेश के साथ प्रतिबद्ध होंगे।
git rebase -i <ref>
मैं ऊपर कहता हूं क्योंकि मैं यह स्पष्ट करना चाहता हूं कि यह किसी भी संख्या में वापस हो सकता है। दौड़ें git log
और उस कमिटमेंट को खोजें जिससे आप छुटकारा पाना चाहते हैं, इसके SHA1 को कॉपी करें और इसके स्थान पर इसका उपयोग करें <ref>
। Git आपको इंटरएक्टिव रिबेस मोड में ले जाएगा। यह आपकी वर्तमान स्थिति और आपके स्थान पर जो कुछ भी डालता है, उसके बीच सभी कमिट्स दिखाएगा <ref>
। तो अगर <ref>
पहले 10 कमिट्स हैं, तो यह आपको सभी 10 कमिट्स दिखाएगा।
प्रत्येक प्रतिबद्ध के सामने, यह शब्द होगा pick
। प्रतिबद्ध आप से छुटकारा पाने और से इसे बदलना चाहते का पता लगाएं pick
करने के लिए fixup
या squash
। fixup
संदेश भेजने और संदेश में अपने तत्काल पूर्ववर्ती में परिवर्तन को मर्ज करने वाले केवल सादर का उपयोग करना । squash
कीवर्ड एक ही बात करता है, लेकिन आप नव संयुक्त प्रतिबद्ध के संदेश के लिए प्रतिबद्ध संपादित करने के लिए अनुमति देता है।
ध्यान दें कि जब आप संपादक से बाहर निकलेंगे तो सूची में दिखाए गए क्रम में कमिट फिर से किया जाएगा। इसलिए यदि आपने एक अस्थायी कमिट किया है, तो उसी ब्रांच पर अन्य काम किया है, और बाद में कमिटमेंट में फीचर को पूरा किया है, तो रिबेस का उपयोग करके आप कमिट्स को फिर से सॉर्ट करने और उन्हें स्क्वैश करने की अनुमति देंगे।
चेतावनी:
रिबासिंग इतिहास को संशोधित करता है - ऐसा न करें कि आप पहले से ही अन्य डेवलपर्स के साथ साझा कर चुके हैं।
stashing
भविष्य में, इस समस्या से बचने के git stash
लिए अस्थायी रूप से बिना काम के स्टोर का उपयोग करने पर विचार करें ।
git stash save 'some message'
यह आपके वर्तमान परिवर्तनों को आपकी स्टैश सूची में किनारे पर संग्रहीत कर देगा। ऊपर स्टैश कमांड का सबसे स्पष्ट संस्करण है, जो टिप्पणी करने की अनुमति देता है कि आप क्या चोरी कर रहे हैं। आप बस चला भी सकते हैं git stash
और कुछ नहीं, लेकिन कोई संदेश संग्रहीत नहीं किया जाएगा।
आप अपनी स्टैश सूची ब्राउज़ कर सकते हैं ...
git stash list
यह आपको आपके सभी स्टैड्स दिखाएगा कि वे किस ब्रांच पर किए गए थे, और मैसेज और प्रत्येक लाइन की शुरुआत में, और उस स्टैश के लिए आइडेंटिफ़ायर जो इस तरह दिखता है stash@{#}
जहाँ # स्टैस की सरणी में उसकी पोजीशन है।
एक स्टैश को पुनर्स्थापित करने के लिए (जो किसी भी शाखा पर किया जा सकता है, चाहे स्टैश मूल रूप से बनाया गया हो) आप बस चलाते हैं ...
git stash apply stash@{#}
फिर, वहाँ # स्टैम्स की सरणी में स्थिति है। यदि आप जिस स्टेश को बहाल करना चाहते हैं, वह 0
स्थिति में है - अर्थात, यदि यह सबसे हालिया स्टेश था। फिर आप बस स्टैश स्थिति को निर्दिष्ट किए बिना कमांड चला सकते हैं, गिट आपको मान लेंगे कि अंतिम एक का मतलब है git stash apply
:।
इसलिए, उदाहरण के लिए, यदि मैं खुद को गलत शाखा पर काम करता हुआ पाता हूं - तो मैं निम्नलिखित अनुक्रम चला सकता हूं।
git stash
git checkout <correct_branch>
git stash apply
आपके मामले में आप शाखाओं के चारों ओर थोड़ा अधिक चले गए, लेकिन एक ही विचार अभी भी लागू होता है।
उम्मीद है की यह मदद करेगा।
git stash