आपको एक इंटरैक्टिव रिबेस करना है। विवरण के लिए गिट रिबेस के लिए सहायता पृष्ठ पढ़ें। संक्षिप्त जवाब यह है कि आप आगे बढ़ेंगे और सामान्य रूप से अपने "मध्य" परिवर्तनों को प्रतिबद्ध करेंगे, फिर git rebase -i HEAD~4
चलाएं। यह टेक्स्ट एडिटर में पिछले 3 कामों की एक सूची लाएगा। बस उन कामों को फिर से व्यवस्थित करें जहां मध्य में नवीनतम प्रतिबद्धता डाली जाती है, और फिर संपादक को सहेजें और बाहर निकलें। फिर गिट नए आदेश में इतिहास का पुनर्निर्माण करने का प्रयास करेगा। यह संघर्ष के साथ बंद हो सकता है। यदि ऐसा है, तो उन्हें ठीक करें जैसे आप विलय विवाद के लिए करेंगे और फिर git rebase --continue
चलाएंगे, जब वे सभी ठीक और जोड़े जाएंगे। जब आप कोई संघर्ष करते हैं तो यह आपको यह सब बताता है, इसलिए केवल त्रुटि संदेशों को पढ़ें और आपको ठीक होना चाहिए।
संपादित करें: वास्तव में, ऐसा लगता है कि आप मौजूदा प्रतिबद्धता को संपादित करना चाहते हैं। उस मामले में, जब संपादक ऊपर आता है, ले जाने के लिए अपने नए अस्थायी commit3 के बगल में होना करने के लिए प्रतिबद्ध है और फिर "स्क्वैश" करने के लिए आदेश को बदलने से "लेने":
pick 123456 commit3
squash 541343 tmpcommit
pick 654321 commit2
pick 431523 commit1
EDIT2: यदि शाखा और commit1, commit2 और commit 3 पहले से ही सार्वजनिक हैं, तो आपको पुन: प्रतिक्रिया नहीं देनी चाहिए। फिर फिर, आपको वैसे भी काम नहीं करना चाहिए, इसलिए पूरा सवाल मंथन होगा। मुझे लगता है कि यह एक निजी शाखा है या एक जिसे दूसरों द्वारा पुनर्जीवित और रिवाउंड करने की उम्मीद है। फ़ाइल पॉप-अप होने में
git rebase -i commit3^
, edit commit3
को pick commit3
बदलने के लिए:
भी देखें http://stackoverflow.com/questions/179123/how-do-i-edit-an-incorrect-commit-message-in-git –