मैंने एक टिप्पणी में जो लिखा है उसका विस्तार करना
सामान्य नियम यह है कि आपको अपने द्वारा प्रकाशित इतिहास को फिर से लिखना (बदलना) नहीं करना चाहिए, क्योंकि हो सकता है कि किसी ने इस पर अपना काम किया हो। यदि आप इतिहास (परिवर्तन) को फिर से लिखते हैं, तो आप उनके परिवर्तनों को मर्ज करने और उनके लिए अद्यतन करने में समस्याएँ खड़ी करेंगे।
तो समाधान यह है कि एक नई कमेटी बनाई जाए जो उन बदलावों को पलट दे, जिनसे आप छुटकारा पाना चाहते हैं। आप इसे git revert कमांड का उपयोग करके कर सकते हैं ।
आपके पास निम्न स्थिति है:
ए <- बी <- सी <- डी <- मास्टर <- हेड
(यहां तीर सूचक की दिशा को संदर्भित करता है: आवागमन के मामले में "माता-पिता" संदर्भ, शाखा प्रमुख (शाखा रेफरी), और HEAD संदर्भ के मामले में शाखा का नाम)।
आपको जो बनाने की आवश्यकता है वह निम्नलिखित है:
ए <- बी <- सी <- डी <- [(बीसीडी) ^ - १] <- मास्टर <- हीड
जहां "[(बीसीडी) ^ - 1]" का अर्थ है कि वह प्रतिबद्धता जो बी, सी, डी में बदल जाती है। गणित हमें बताता है कि (बीसीडी) ^ - 1 = डी ^ -1 सी ^ -1 बी ^ -1, इसलिए आप निम्न आदेशों का उपयोग करके आवश्यक स्थिति प्राप्त कर सकते हैं:
$ git revert --no-commit D
$ git revert --no-commit C
$ git revert --no-commit B
$ git commit -m "the commit message"
वैकल्पिक समाधान के लिए प्रतिबद्ध ए की सामग्री की जांच करना , और इस राज्य को प्रतिबद्ध करना होगा:
$ git checkout -f A -- .
$ git commit -a
तब आपके पास निम्न स्थिति होगी:
ए <- बी <- सी <- डी <- ए '<- मास्टर <- हेड
कमिट ए 'में कमिट ए के समान सामग्री है, लेकिन एक अलग कमिट (संदेश, माता-पिता, प्रतिबद्ध तारीख) है।
जेफ Ferland द्वारा समाधान, चार्ल्स बेली द्वारा संशोधित एक ही विचार पर बनाता है, लेकिन का उपयोग करता Git रीसेट :
$ git reset --hard A
$ git reset --soft @{1} # (or ORIG_HEAD), which is D
$ git commit
git push -f HEAD~4:master
(दूरस्थ शाखा मास्टर है)। हां, आप किसी भी प्रतिबद्ध को धक्का दे सकते हैं।