git - "गिट प्रतिबद्ध" के बजाय "गिट प्रतिबद्ध--amend" पूर्ववत कैसे करें




commit undo (5)

मैंने गलती से मेरी पिछली प्रतिबद्धता में संशोधन किया। किसी विशेष फ़ाइल में किए गए परिवर्तनों के इतिहास को रखने के लिए प्रतिबद्धता अलग होनी चाहिए।

क्या आखिरी प्रतिबद्धता को पूर्ववत करने का कोई तरीका है? अगर मैं git reset --hard HEAD^ जैसे कुछ करता हूं, तो पहला प्रतिबद्धता भी पूर्ववत हो जाती है।

(मैंने अभी तक किसी भी दूरस्थ निर्देशिका में धक्का नहीं दिया है)


  1. अंतिम प्रतिबद्धता के साथ अस्थायी शाखा में चेकआउट करें

    git branch temp [email protected]{1}

  2. अंतिम प्रतिबद्धता रीसेट करें

    git reset temp

  3. अब, आपके पास अपनी प्रतिबद्धताओं के साथ-साथ पिछली प्रतिबद्धता भी होगी। सभी फाइलों की स्थिति की जांच करें।

    git status

  4. गिट स्टेज से अपनी प्रतिबद्ध फ़ाइलों को रीसेट करें।

    git reset myfile1.js (इतने पर)

  5. इस प्रतिबद्धता को दोबारा दोहराएं

    git commit -C [email protected]{1}

  6. अपनी फाइलें नई प्रतिबद्धता में जोड़ें और प्रतिबद्ध करें।


अपने संशोधित प्रतिबद्धताओं को ढूंढें:

git log --reflog

नोट: आप स्पष्टता के लिए काम के शरीर को देखने के लिए - --patch जोड़ सकते हैं। git reflog समान ही।

फिर अपने सिर को किसी भी पिछली प्रतिबद्धता पर रीसेट करें, यह ठीक है:

git reset SHA1 --hard

नोट: SHA1 को अपने असली प्रतिबद्ध हैश के साथ बदलें यह भी ध्यान रखें कि यह आदेश किसी भी असामान्य परिवर्तन को खो देगा, ताकि आप उन्हें पहले रोक सकें।

फिर चेरी-उस अन्य प्रतिबद्धता को चुनें जिसे आपको इसके शीर्ष पर चाहिए:

git cherry-pick SHA1

शायद यह ध्यान देने योग्य है कि यदि आप अभी भी प्रतिबद्धता संदेश के साथ अपने संपादक में हैं, तो आप प्रतिबद्ध संदेश हटा सकते हैं और यह git commit --amend कमांड कमांड को रोक देगा।


शायद संशोधन और संशोधन के बाद दो प्रतिबद्धताओं को प्राप्त करने के लिए git reflog का उपयोग कर सकते हैं।

इसके बाद पहले संशोधन करने के बाद और संशोधन के बीच अंतर प्राप्त करने के लिए git diff before_commit_id after_commit_id > d.diff का उपयोग करें।

प्रतिबद्ध करने से पहले वापस git checkout before_commit_id लिए git checkout before_commit_id का उपयोग करें

और आपके द्वारा किए गए वास्तविक परिवर्तन को लागू करने के लिए अंतिम उपयोग git apply d.diff लागू करें।

यह मेरी समस्या हल करता है।


ref-log उपयोग करें:

git branch fixing-things [email protected]{1}
git reset fixing-things

तब आपके पास अपने पहले से ही संशोधित परिवर्तनों को केवल अपनी कार्यशील प्रतिलिपि में रखना चाहिए और फिर से प्रतिबद्ध कर सकते हैं

पिछले इंडेक्स टाइप git reflog की पूरी सूची देखने के लिए







amend