2009-11-27 10 views
90

एसवीएन के साथ एक प्रतिबद्धता को उलटा करना आसान है, लेकिन गिट के साथ ऐसा कैसे करें?गिट: एक प्रतिबद्धता को रिवर्स-विलय कैसे करें?

+0

की डुप्लीकेट [प्रतिबद्ध पिछले एक Git को वापस लाएं ] (http://stackoverflow.com/questions/4114095/revert-to-a-previous-git-commit) –

+0

मुझे नहीं लगता कि यह सवाल है। एसवीएन में एक रिवर्स-विलय भी प्रतिबद्धता से परिवर्तनों को स्थानीय परिवर्तनों में बदल देता है, ताकि आप उन्हें संपादित कर सकें और फिर से प्रतिबद्ध कर सकें। – Dormouse

उत्तर

92

करने के लिए देख रहे हैं एक नए प्रतिबद्ध है कि 'नाश कर देती है' एक अतीत की परिवर्तन हो, उपयोग बनाने के लिए:

$ git revert <commit> 

यह वास्तव में करने के लिए भी संभव है अतीत में एक मनमानी बिंदु से रीबेजिंग और फिर रीसेट करके एक प्रतिबद्धता को हटा दें, लेकिन आप वास्तव में ऐसा नहीं करना चाहते हैं अगर आप पहले से ही किसी अन्य भंडार (या किसी और ने आपको खींच लिया है) पर धक्का दिया है।

+25

आपको शायद 'git revert'' विकल्प को 'git revert'' करने की आवश्यकता होगी ताकि यह निर्दिष्ट किया जा सके कि कौन सा परिवर्तन वापस करने के लिए है। यदि आप गैर-प्रकाशित इतिहास के विलय को पूर्ववत करना चाहते हैं, तो 'गीट रीसेट - हार्ड HEAD^1' का उपयोग करें। –

+2

Jakub: यह सच है यदि आप विलय प्रतिबद्धता को वापस कर रहे हैं, लेकिन सबवर्जन शब्दावली में, "रिवर्स-मर्ज" वास्तव में किसी भी प्रकार की प्रतिबद्धता को वापस करने का नाम है। –

+4

ध्यान दें कि '-m' का उपयोग करने का अर्थ है कि गैर-विलय वाली शाखा से भविष्य में विलय में विलय से पहले परिवर्तन शामिल नहीं होंगे! एक अनर्जित शाखा को दोबारा विलय करने के उचित तरीकों के लिए http://schacon.github.com/git/howto/revert-a-faulty-merge.txt देखें। –

4

अगर मैं तुम्हें सही ढंग से समझ, आप एक

svn merge -rn:n-1 

कर एक पहले से बाहर वापस करने के लिए के बारे में बात कर रहे हैं के लिए प्रतिबद्ध है, जो मामले में, आप शायद के लिए

git revert 
84

विलय प्रतिबद्धता को वापस करने के लिए, आपको इसका उपयोग करने की आवश्यकता है: git revert -m। उदाहरण के लिए, हाल ही में सबसे अधिक संख्या 1 के साथ माता-पिता का उपयोग कर के लिए प्रतिबद्ध आप का प्रयोग करेंगे विलय वापस लौटने के लिए:
git revert -m 1 HEAD

वापस जाने के लिए किसी मर्ज के लिए प्रतिबद्ध पिछले प्रतिबद्ध से पहले, आप क्या करेंगे:
git revert -m 1 HEAD^

उपयोग माता-पिता को देखने के लिए git show <merge commit SHA1>, संख्या वह क्रम है जो वे दिखाई देते हैं Merge: e4c54b3 4725ad2

Git मर्ज प्रलेखन: http://schacon.github.com/git/git-merge.html

Git मर्ज चर्चा (भ्रामक लेकिन बहुत विस्तृत): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt

+28

आप माता-पिता से जुड़े 'नंबर' को कैसे प्राप्त कर सकते हैं? क्या शाखाओं में आंतरिक संख्यात्मक 'आईडी' है? – daniyalzade

+6

माता-पिता को देखने के लिए 'गिट शो <मर्ज करें SHA1>' का उपयोग करें, संख्या वह क्रम है जो वे दिखाई देते हैं उदा। 'मर्ज करें: e4c54b3 4725ad2' – supermethod

+4

उदाहरण: 'गिट रिवर्ट -एम 1 SHA1' वह आदेश मेरे लिए एक विलय प्रतिबद्धता को वापस करने के लिए काम करता था जो कि कई विलय सिर से पहले होता था और कई लोग नीचे काम करते थे। –

-2
git reset --hard HEAD^ 

उपयोग उपरोक्त आदेश परिवर्तन मर्ज वापस लौटने के लिए।

+2

यह मर्ज प्रतिबद्धता को फेंक देता है, जो मूल पोस्टर पूछताछ नहीं करता है। ओपी पिछले परिवर्तनों को पूर्ववत करने के लिए एक रिवर्स पैच करने की कोशिश कर रहा है, पिछले परिवर्तनों के इतिहास को पूरी तरह मिटाना नहीं। –

-1

आप प्रतिबद्ध, या बाद में करने के लिए चाहते करने के लिए नहीं करना चाहते हैं (प्रतिबद्ध संदेश अभी भी आप के लिए तैयार हो जाएगा, जो आप भी संपादित कर सकते हैं):

git revert -n <commit> 
संबंधित मुद्दे