Git: किसी कमेंट को रिवर्स-मर्ज कैसे करें?


124

SVN के साथ कमिट-मर्ज करना आसान है, लेकिन Git के साथ ऐसा कैसे करें?



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

जवाबों:


105

एक नया कमिट बनाने के लिए कि पिछले कमिट के बदलावों को 'अनडू' करें, उपयोग करें:

$ git revert <commit>

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


31
संभवतः आपको यह निर्दिष्ट -m <parent number>करने के git revertलिए विकल्प की आपूर्ति करने की आवश्यकता होगी कि कौन से परिवर्तन को वापस करना है। यदि आप गैर-प्रकाशित इतिहास का विलय पूर्ववत करना चाहते हैं, तो उपयोग करें git reset --hard HEAD^1
जकुब नारबस्की

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

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

125

एक मर्ज कमिट वापस करने के लिए, आपको उपयोग करने की आवश्यकता है git revert -m <parent number>:। इसलिए, उदाहरण के लिए, नंबर 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


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

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

8
उदाहरण: git revert -m 1 SHA1उस कमांड ने मेरे लिए एक मर्ज कमेटी को वापस लाने के लिए काम किया था जो कि हेड से पहले कई मर्ज वाले कमिट थे और कई कमिट्स थे।
c.apolzon

3
माता-पिता कौन है? E4c54b3 या 4725ad2?
डॉल्फिन

1
यह अभी भी पर्याप्त जानकारी प्रदान नहीं करता है कि git शो के परिणाम मूल संख्याओं से कैसे संबंधित हैं। क्या "आदेश वे दिखाई देते हैं" 1-आधारित? 0-आधारित? इस उदाहरण में विशेष रूप से, माता-पिता 1 का SHA1 क्या है? e4c54b3 या 4725ad2?
काउललाइनर

4

अगर मैं आपको सही तरीके से समझूं, तो आप एक करने की बात कर रहे हैं

svn merge -rn:n-1

पहले के कमिट से बाहर, किस मामले में, आप शायद खोज रहे हैं

git revert

0
git reset --hard HEAD^ 

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


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

-1

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

git revert -n <commit>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.