हालांकि मर्कुरियल एक आसान विकल्प प्रदान नहीं करता है और उत्परिवर्तनीय इतिहास के विचार से दूर रहता है, कुछ करीब प्राप्त करने के कुछ तरीके हैं। इस पोस्ट में, मैं उनमें से कुछ को रेखांकित कर दूंगा।
एचजी रोलबैक
आप विशेष रूप से पूर्ववत करना चाहते हैं अपने पिछले प्रतिबद्ध है, तो आप उपयोग कर सकते हैं:
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
परिवर्तनों को हटा देगा, ताकि आप सुनिश्चित कर सकें कि आप अपने प्रतिबद्ध इतिहास को अपरिवर्तनीय रूप से नुकसान नहीं पहुंचाते हैं (क्योंकि आपके पास बैकअप हैं ... सही?)।
तो, एचजी में रीसेट-समकक्ष रोलबैक/स्ट्रिप सिर्फ एक शाखा टैग को इंगित करने के बजाय बदलती है, इसमें डेटाबेस में कुछ वास्तविक परिवर्तन शामिल है? – jthill