2012-07-04 8 views
7

Git का उपयोग करना, मैं फेंक सकता एक गलत या आकस्मिक तरहमर्क्युरियल (Git रीसेट की तरह) में वापस एक पुराने संशोधन करने के लिए रोलिंग

git reset --soft HEAD^ 

जो करने के लिए वर्तमान शाखा (जैसे master) रीसेट करता है एक आदेश का उपयोग प्रतिबद्ध वर्तमान संशोधन के माता-पिता HEAD^ काम कर रहे पेड़ को छूए बिना --soft--hard के साथ प्रतिस्थापित कर सकते हैं यदि आप काम करने वाले पेड़ को भी मिटा देना चाहते हैं।

इसके अलावा, अगर मैं एक से अधिक से छुटकारा पाने के लिए चाहते हैं के लिए प्रतिबद्ध है, मैं एक आदेश की तरह

git reset --hard 53b94d0 

जो मुझे लाता है वापस बिल्कुल 53b94d0 प्रतिबद्ध करने के लिए के रूप में अगर मैं उस के बाद कुछ भी प्रतिबद्ध कभी नहीं किया था का उपयोग कर सकते हैं।

Mercurial (hg) समतुल्य क्या है?

उत्तर

19

हालांकि मर्कुरियल एक आसान विकल्प प्रदान नहीं करता है और उत्परिवर्तनीय इतिहास के विचार से दूर रहता है, कुछ करीब प्राप्त करने के कुछ तरीके हैं। इस पोस्ट में, मैं उनमें से कुछ को रेखांकित कर दूंगा।

एचजी रोलबैक

आप विशेष रूप से पूर्ववत करना चाहते हैं अपने पिछले प्रतिबद्ध है, तो आप उपयोग कर सकते हैं:

hg rollback 

जो पूर्ववत होगा प्रतिबद्ध (जो काम कर पेड़ स्पर्श नहीं करता है - आप में सक्षम होना चाहिए यदि आप पूरी कार्य निर्देशिका को रीसेट करना चाहते हैं तो hg revert --all या hg update -C के साथ इसका पालन करने के लिए)।

एचजी क्लोन -r

आप अपने भंडार संशोधन 77182fb7451f को giraffe बुलाया रीसेट करना चाहते हैं मान लीजिए। आप cd मूल निर्देशिका में और चलाते हैं:

hg clone -r 77182fb7451f giraffe new-giraffe 
cp giraffe/.hg/hgrc new-giraffe/.hg/ 

तो आप नए-जिराफ़, संशोधन 77182fb7451f पर भंडार के साथ खत्म हो जाएगा। (cp है कि नए-जिराफ़ paths (Git के "रिमोट" की तरह) सुनिश्चित करने के लिए सही ढंग से के रूप में यह डिफ़ॉल्ट रूप से होगा मूल रेपो के बजाय giraffe फ़ोल्डर को इंगित आवश्यक है।)

यह इंटरनेट से recloning की तुलना में तेजी है क्योंकि यह केवल आपकी डिस्क पर स्थानीय रूप से फ़ाइलों की प्रतिलिपि बनाता है (और कई प्रणालियों पर, उन्हें और भी समय और स्थान बचाने के लिए हार्ड-लिंक), लेकिन यदि आपका भंडार बड़ा है तो भी वास्तव में समय लेने वाला हो सकता है।

एचजी पट्टी

आप, प्रतिबद्ध इतिहास को संशोधित करने के लिए (जो कुछ हद तक एचजी दुनिया में पर सिकोड़ी है, वैसे) के साथ और अधिक जटिल बातें करते हैं पहले निम्न पंक्तियां जोड़कर Mercurial Queues extension सक्षम करना चाहते हैं अपने hg strip आदेश पूरी तरह से एक रिपोजिटरी से एक changeset और उसके वंश के सभी दूर करने के लिए

[extensions]                  
mq = 

यह आपको (अन्य उपयोगी बातों के अलावा) देता है: .hgrc (कोई के बाद बराबर चिह्न एक पथ निर्दिष्ट करने की आवश्यकता है)।इस प्रकार आप की तरह एक आदेश का उपयोग कर सकते हैं:

hg strip 1cc72d33ea76 

अगर 1cc72d33ea76 अपने भंडार में पहले "बुरा" changeset जिसे आप निकालना चाहते हैं।

दुर्भाग्य से, यह अक्सर इस पद्धति का उपयोग बिल्कुल सही changesets दूर करने के लिए मुश्किल है और यह सब भी कई प्रमुखों (जो आप hg heads का उपयोग कर देख सकते हैं) के साथ अंत करने के लिए आसान है, इससे पहले कि आप जहां के लिए प्राप्त कर सकते हैं hg strip की थकाऊ दोहराया आवेदन की आवश्यकता होती है आप बिना अतिरिक्त सिर के रहना चाहते हैं।

revsets एचजी पट्टी का उपयोग कर

, hg revsets का उपयोग करके आप . (वर्तमान संशोधन) के सभी पूर्वजों जो नहीं संशोधन आप को वापस करना चाहते हैं के पूर्वजों को हटा सकते हैं की तरह एक आदेश का उपयोग:

hg strip "ancestors(.) and not ancestors(77182fb7451f)" 

पहली बार चलाने के लिए सुनिश्चित करें:

hg log -r "ancestors(.) and not ancestors(77182fb7451f)" 

जो आप अल दिखाएगा एल hg strip परिवर्तनों को हटा देगा, ताकि आप सुनिश्चित कर सकें कि आप अपने प्रतिबद्ध इतिहास को अपरिवर्तनीय रूप से नुकसान नहीं पहुंचाते हैं (क्योंकि आपके पास बैकअप हैं ... सही?)।

+0

तो, एचजी में रीसेट-समकक्ष रोलबैक/स्ट्रिप सिर्फ एक शाखा टैग को इंगित करने के बजाय बदलती है, इसमें डेटाबेस में कुछ वास्तविक परिवर्तन शामिल है? – jthill

संबंधित मुद्दे