git मैं रीसेट कैसे करूं-Mercurial पर हेड हेड?




merge dvcs (4)

मैं एक गिट उपयोगकर्ता हूं जो Mercurial का उपयोग करने की कोशिश कर रहा है।

यहां क्या हुआ: मैंने एक बदलाव पर एक hg backout किया जिसे मैं वापस करना चाहता था। इसने एक नया सिर बनाया, इसलिए एचजी ने मुझे विलय करने के लिए निर्देश दिया (वापस "डिफ़ॉल्ट" पर, मुझे लगता है)। विलय के बाद, उसने मुझे बताया कि मुझे अभी भी प्रतिबद्ध करना है। तब मैंने देखा कि विलय में संघर्ष को हल करते समय मैंने कुछ गलत किया, और फैसला किया कि मैं hg backout पहले सबकुछ रखना चाहता हूं, यानी, मैं यह असामान्य विलय दूर जाना चाहता हूं। गिट पर यह अनचाहे सामान इंडेक्स में होगा और मैं सिर्फ एक git reset --hard HEAD करूँगा - git reset --hard HEAD इसे मिटा दें लेकिन, जो मैंने पढ़ा है, उससे सूचकांक Mercurial पर मौजूद नहीं है। तो मैं इससे कैसे पीछे हट सकता हूं?


एचजी मैनुअल के GitConcepts पेज बताते हैं कि मर्क्यूरियल में कितने एक्शन git उपयोगकर्ता परिचित हैं।

Mercurial में कोई अंतर्निहित git reset --hard व्यवहार व्यवहार। हालांकि, strip एक्सटेंशन एक strip कमांड प्रदान करता है जो करता है। उपयोग करने के लिए, पहले अपनी ~/.hgrc फ़ाइल में strip सक्षम करें ::

[extensions]
strip =

नोट: यह विस्तार Mercurial-2.8 में नए में है। पहले संस्करणों ने mq एक्सटेंशन में strip कमांड प्रदान किया था।

अब आप hg strip या यहां तक ​​कि hg help strip जैसे कमांड चला सकते हैं। एक परिवर्तन और उसके सभी बच्चों को हटाने के लिए, बस hg strip लिए एक तर्क के रूप में परिवर्तन निर्दिष्ट करें। उदाहरण के लिए, आपके द्वारा अभी तक की गई अंतिम प्रतिबद्धता को हटाने के लिए (आपके द्वारा आदेशों का उपयोग करने के बाद hg rollback ने रिपोर्ट किया कि hg rollback लिए कोई लेनदेन नहीं है), आप tip संशोधन को हटा सकते हैं। प्रत्येक बार जब आप यह आदेश चलाते हैं, तो एक और संशोधन हटा दिया जाएगा। hg strip के कार्यों को अपरिवर्तनीय माना जाना चाहिए; अपरिचित उपयोगकर्ताओं को उपयोग करने से पहले अपने भंडारों का बैकअप बनाना चाहिए।

$ hg strip tip

उदाहरण के लिए, रेवसेट सिंटैक्स के साथ, मैं इंगित करता हूं कि मैं अपने किसी भी काम को हटाना चाहता हूं जिसके परिणामस्वरूप अतिरिक्त सिर दिखाए जा रहे हैं जब मैं hg heads चलाता हूं। यदि आप tip अलावा नीचे दी गई अभिव्यक्ति में कोई विशेष संशोधन निर्दिष्ट करते हैं, तो वर्तमान शाखा में जो कुछ भी आपके चुने हुए संशोधन का पूर्वज नहीं है, उसे छंटनी की जाएगी। जब मैं कमांड git reset --hard HEAD जारी करता हूं तो यह व्यवहार के सबसे नज़दीक लगता है।

$ hg strip "branch(tip) and not(ancestors(tip)::tip)"

यह करीब है:

hg update --clean


गिट से, आदेश:

git reset --hard     # reset to last commit    
git clean -df        # delete untracked files

के बराबर हैं

hg update --clean    # reset to last commit  
hg purge             # delete untracked files

यदि आपने अभी तक काम नहीं किया है, और ऐसा लगता है कि आपने hg update --clean साथ सभी विलय कार्य को पूर्ववत नहीं किया है।

हालांकि, नए Mercurial में एक फ़ाइल को दोबारा विलय करने के लिए एक आसान कमांड है: hg resolve path/to/file.exthg help resolve :

The available actions are: ...

 4) discard your current attempt(s) at resolving conflicts and

स्क्रैच से विलय को पुनरारंभ करें: "एचजी संकल्प फ़ाइल ..." (या "-a" सभी अनसुलझे फ़ाइलों के लिए)







dvcs