मैंने एक परिवर्तन किया है और परिवर्तन सेट में एक फ़ाइल जोड़ना भूल गया हूँ। अन्य कमिट के बाद, मुझे एहसास हुआ कि फाइल अब एक HEAD^4कमिट से गायब है ।
लापता फ़ाइल को शामिल करने के लिए मैं पिछली प्रतिबद्धता को कैसे फिर से लिखूंगा?
मैंने एक परिवर्तन किया है और परिवर्तन सेट में एक फ़ाइल जोड़ना भूल गया हूँ। अन्य कमिट के बाद, मुझे एहसास हुआ कि फाइल अब एक HEAD^4कमिट से गायब है ।
लापता फ़ाइल को शामिल करने के लिए मैं पिछली प्रतिबद्धता को कैसे फिर से लिखूंगा?
जवाबों:
जिस संशोधन के लिए आप संशोधन करना चाहते हैं, उसके लिए विकल्प का उपयोग करें git rebase --interactive HEAD~4और सेट करें edit।
याद रखें कि आपको इस तरह से दूरस्थ रिपॉजिटरी में धकेल दिए गए कमिट को संशोधित नहीं करना चाहिए । उस मामले में लापता फ़ाइल के साथ एक नई प्रतिबद्धता जोड़ना बेहतर है।
git push -fयदि मुझे यकीन है कि अपस्ट्रीम में बदलाव नहीं हुआ है?
addगायब फाइलें हैं, इसलिए मैंने संदेश के रूप में "xxx" के साथ एक कमिट किया। फिर मैंने रिबास कमांड किया, और "xxx" कमिटमेंट को "पिक" से "एडिट" में बदल दिया। फिर मैंने "गिट रिबेस - कॉन्टिन्यू" किया। अब जब मैं इतिहास को देखता हूं तो मेरे पास नवीनतम कमिट के रूप में "xxx" है, और पहले वाली कमिटमेंट मैं उन्हें जोड़ना चाहता हूं जो अपरिवर्तित है! मुझे आश्चर्य है कि मेरी गलती कहाँ थी?
मुझे पता है कि लोग Google और यहां आकर एक सरल उत्तर पा सकते हैं: अगर यह अंतिम प्रतिबद्धता थी तो क्या होगा? (ओपी का सवाल इतिहास में 4 वीं प्रतिबद्धता को ठीक करने के लिए है)
आपके द्वारा किए गए मामले में और आपको एहसास है कि आप तुरंत कुछ फ़ाइल जोड़ना भूल गए हैं , बस:
# edited file-that-i-remember.txt
git add file-that-i-remember.txt
git commit
# realize you forgot a file
git add file-that-i-forgot.txt
git commit --amend --no-edit
--no-editवही कमिट मैसेज कहां रखेगा।
बहुत आसान!
--amendमें अलग-अलग हैश
HEAD^4। यह ठीक है जिस तरह से यह है, बस संदर्भ के लिए एक परिशिष्ट के रूप में। ;)
यदि आपने इन 4 कमिटों को नहीं धकेला है, तो आप इसे निम्न प्रकार से कर सकते हैं:
इन सभी हिट के लिए पैच फाइल बनाएं:
git format-patch -4
4 कमिट द्वारा वापस जाएं:
git reset --hard HEAD~4
अनुपलब्ध फ़ाइल जोड़ें:
git add missing-file
इसके साथ करें --amend:
git commit --amend
सभी सहेजे गए पैच वापस लागू करें:
git am *.patch
यदि आपने धक्का दिया है, तो आपको इस विधि का उपयोग नहीं करना चाहिए। इसके बजाय, बस अपने दोष को स्वीकार करें और HEAD के शीर्ष पर एक और प्रतिबद्ध बनाएं जो इस समस्या को ठीक करता है।
git format-patch/ git amबहुत बेहतर। सबसे महत्वपूर्ण बात यह है कि अगर आप किसी चीज को खराब करते हैं तो यह आपको अधिक आत्मविश्वास देता है - भौतिक फ़ाइल में पैच के रूप में सहेजा गया आपका सबसे अच्छा सुरक्षा जाल है।
git gc:)
rm *.patch)
यद्यपि स्वीकृत उत्तर सही है, फिर भी यह विस्तृत निर्देश का अभाव है कि एक रिबेस प्रक्रिया के दौरान किसी संपादन को कैसे निष्पादित किया जाए।
सबसे पहले, एक रिबास प्रक्रिया शुरू करें:
git rebase --interactive HEAD~4
कमिट की एक सूची प्रस्तुत की जाएगी, एक प्रतिबद्ध चुनें जिसे आप शब्द pickको editफ़ाइल में बदलकर संपादित करना चाहते हैं ।
अपने कोड में आवश्यक संशोधन करें ( git addनई फाइलों के लिए आह्वान करना याद रखें )
सभी संशोधन किए जाने के बाद, मुद्दा git commit --amend- यह एक प्रतिबद्ध के रूप में चिह्नित संशोधन करेगाedit
आह्वान करें git rebase --continueकि प्रक्रिया समाप्त हो जाएगी (यदि इसके रूप में चिह्नित अधिक हिट हैं edit, तो उपरोक्त चरणों को दोहराया जाना चाहिए)
महत्वपूर्ण लेख:
उन पंक्तियों को न हटाएं pickजिन्हें आप संपादित नहीं करना चाहते हैं - उन्हें वैसे ही छोड़ दें। इन लाइनों को हटाने से संबंधित कमिट्स को हटा दिया जाएगा
stashयदि आपकी वर्किंग डाइरेक्टरी साफ़ नहीं है, तो GIT आपको रिबास करने से पहले मजबूर करता है ; हालांकि git stash pop / git stash apply, इन परिवर्तनों को संशोधित करने के लिए आप रिबेस के दौरान कर सकते हैं (जैसे कि रिबेस प्रक्रिया शुरू करने से पहले स्टैक्ड हो गए) एक कमिट के रूप में चिह्नित किए गएedit
अगर कुछ गलत हो गया है और आप रिबास प्रक्रिया के दौरान किए गए बदलावों को वापस करना चाहते हैं, तो इसे समाप्त करने से पहले (यानी आप रिबास शुरू करने से पहले बिंदु पर वापस लौटना चाहते हैं), का उपयोग करें git rebase --abort- यह भी पढ़ें: एक इंटरैक्टिव रिबेट को रद्द कैसे करें यदि --abort doesn ' टी काम?
जैसा कि स्वीकृत उत्तर में कहा गया है:
याद रखें कि आपको इस तरह से दूरस्थ रिपॉजिटरी में धकेल दिए गए कमिट को संशोधित नहीं करना चाहिए। उस मामले में लापता फ़ाइल के साथ एक नई प्रतिबद्धता जोड़ना बेहतर है।
क्यों, इसका उत्तर Git Book में है (पैराग्राफ " रिबासिंग का शीर्षक "):
अपने रिपॉजिटरी के बाहर मौजूद कमिट्स को दोबारा न करें।
यदि आप उस दिशानिर्देश का पालन करते हैं, तो आप ठीक हो जाएंगे। यदि आप नहीं करते हैं, तो लोग आपसे घृणा करेंगे, और आप दोस्तों और परिवार के लोगों से घृणा करेंगे।
जब आप सामान को रिबेट करते हैं, तो आप मौजूदा कमिट्स को छोड़ देते हैं और नए बनाते हैं जो समान लेकिन अलग होते हैं। यदि आप कहीं धक्का देते हैं और अन्य लोग उन्हें नीचे खींचते हैं और उन पर काम करते हैं, और फिर आप उन लोगों को फिर से लिखने के साथ फिर से लिखते हैं और उन्हें फिर से धक्का देते हैं, तो आपके सहयोगियों को अपने काम को फिर से मर्ज करना होगा और जब आप कोशिश करेंगे तो चीजें गड़बड़ हो जाएंगी अपने काम को वापस अपने में खींचो।
[...]