मर्क्यूरियल पूर्ववत करें


125

मैं Mercurial में अपने अंतिम गलती से शुरू हुए (धकेले नहीं) को कैसे बदल सकता हूं?

यदि संभव हो, तो कछुआ के साथ ऐसा करने का एक तरीका पसंद किया जाएगा।

अपडेट करें

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


1
दो बनाने के बारे में क्या hg rollback, और फिर फिर से खींच?
VonC

1
पहला रोलबैक पुल को पूर्ववत करता है, दूसरा रोलबैक मुझे "कोई रोलबैक जानकारी उपलब्ध नहीं है" बताता है।
मार्टिन बुबर्ल

1
मैंने एक ही स्थिति का सामना किया है, और जहाँ तक मुझे पता है कि एक बार आपने कोई अन्य ऑपरेशन किया है - तो आप वापस नहीं जा सकते हैं या इसे इतिहास से हटा नहीं सकते हैं। आपको hg रिपॉजिटरी को फिर से क्लोन करना होगा।

3
strip --keep: stackoverflow.com/questions/29413851/… सीधे कार्य को हल करता है, जैसा कि MQ qimport करता है। वैकल्पिक रूप से, यह rebaseइस परिदृश्य में बेहतर हो सकता है कि यदि स्थानीय परिवर्तन भी रखे जाएं और कोई टकराव न हो। ( दोनों शाखाओं से कुछ संयुक्त परिवर्तन रखने के लिए एक मर्ज का उपयोग करें जब कि वांछित ग्राफ अंत-लक्ष्य है, विशेष रूप से एक गैर-फास्टवर्ड मामले पर।) यह शाखा को बंद करने के लिए भी मान्य हो सकता है, जो अभी भी 'इतिहास को संरक्षित करता है' (लेकिन वांछित राज्य के आधार पर अलग से एक मर्ज)।
user2864740

2
जैसा @ user2864740 कहता है, hg strip --keepक्या कमांड का उपयोग है, लेकिन आपको एक संशोधन प्रदान करने की आवश्यकता है, जैसे hg strip --keep -r .:। यह उत्तर अच्छी तरह से समझाता है stackoverflow.com/a/19064016/1286571
ForeverWintr

जवाबों:


77

एक तरीका होगा hg rollback (Hg2.7 के रूप में पदावनत, अगस्त 2013)

कृपया अंतिम प्रतिबद्ध में सही गलतियों के hg commit --amendबजाय उपयोग करें rollback

एक रिपॉजिटरी में अंतिम लेन-देन वापस करें।

जब कमिट या विलय होता है , तो मर्क्यूरियल पिछले बदलाव की प्रविष्टि को जोड़ता है ।
मर्क्यूरियल लेन-देन से पहले छपी प्रत्येक फ़ाइल के नाम और उसकी लंबाई का एक लेन-देन लॉग रखता है। गर्भपात करने पर, यह प्रत्येक फाइल को उसकी पूर्व लंबाई तक काट देता है। यह सादगी केवल अपेंडिक्स को सुधारने का एक फायदा है । लेनदेन पत्रिका एक पूर्ववत संचालन की भी अनुमति देती है।

TortoiseHg रिकवरी अनुभाग देखें :

वैकल्पिक शब्द

इस धागे में भी अंतर का वर्णन है hg rollbackऔर hg strip:
( मार्टिन गीस्लर द्वारा लिखित जो एसओ पर भी योगदान देता है)

  • ' hg rollback' अंतिम लेनदेन को हटा देगा। लेनदेन एक अवधारणा है जो अक्सर डेटाबेस में पाई जाती है। मर्क्यूरियल में हम कुछ ट्रांजेक्शन शुरू करते हैं, जैसे कमिट, रन, पुश ...
    जब ऑपरेशन सक्सेसफुल खत्म हो जाता है, तो ट्रांजेक्शन पूरा हो जाता है। यदि कोई त्रुटि होती है, तो लेन-देन "वापस लुढ़का" होता है और रिपॉजिटरी को पहले की तरह उसी स्थिति में छोड़ दिया जाता है।
    आप 'एचजी रोलबैक' के साथ रोलबैक को मैन्युअल रूप से ट्रिगर कर सकते हैं। यह अंतिम लेनदेन आदेश को पूर्ववत कर देगा। यदि एक पुल कमांड विभिन्न शाखाओं पर 10 नए परिवर्तनों को रिपॉजिटरी में लाया, तो ' hg rollback' उन सभी को हटा देगा। कृपया ध्यान दें: लेन-देन रोलबैक करते समय कोई बैकअप नहीं है !

  • ' hg strip' एक बदलाव और उसके सभी वंशज को हटा देगा। परिवर्तनों को एक बंडल के रूप में सहेजा जाता है, जिसे आप फिर से लागू कर सकते हैं यदि आपको उनकी आवश्यकता है।

फॉरएवरविंटर टिप्पणियों में सुझाव देता है (2016 में, 5 साल बाद)

आप उन्हें पहले भूलकर, उदाहरण के लिए: 'अन-कमिट' फाइल कर सकते हैं hg forget filea; hg commit --amend
hg strip --keepशायद आधुनिक एचजी के लिए एक बेहतर समाधान है।


जब मैं समझता हूं कि रोलबैक सही है तो पिछले लेनदेन को हटा दिया गया है। मेरे मामले में मैंने कमिट किया, फिर मैंने सर्वर से खींच लिया। तो, क्या इसका मतलब है कि मैं कमिट के बजाय पुलबैक को रोलबैक करूंगा?
मार्टिन बुबर्ल

1
@Martin Buberl: के अनुसार selenic.com/mercurial/hg.1.html#rollback , पुल एक सौदे माना जाता है। इसलिए यदि आप खींचते हैं, तो निष्पादन hg rollbackकमिट के बजाय पुल को पूर्ववत कर देगा।
टिम हेनिगन

2
मुझे यकीन नहीं है कि कैसे hg commit --amendकाम करना चाहिए, लेकिन मेरे लिए इसने मुझे प्रतिबद्ध संदेश को संशोधित करने के लिए एक संपादक दिया और जो फाइलें शामिल थीं उन्हें बदलने का कोई तरीका नहीं है। मैंने बिना सहेजे संपादक को बाहर निकाल दिया और पाया कि मेरी गलती से सभी परिवर्तित फ़ाइलों को शामिल करने के लिए प्रतिबद्ध है !
टिम टिस्डाल

2
यह मेरे लिए स्पष्ट नहीं है कि प्रश्न के उत्तर का उपयोग कैसे किया जाए hg commit --amend। आप hg forgetउन्हें पहले टिंग करके 'अन-कमिट' फाइल कर सकते हैं, जैसे:, hg forget filea; hg commit --amendलेकिन यह अनजाने में लगता है। एचजी स्ट्रिप - प्रशासन आधुनिक एचजी के लिए एक बेहतर समाधान है।
फॉरएवरविंटर

1
@JasonS book.mercurial-scm.org/read/… एक अच्छा पढ़ा है, हालाँकि आपके मामले में, आप hg रीसेट पर भी विचार कर सकते हैं: stackoverflow.com/a/31302998/6309
VONC

46

hg strip पूरी तरह से रिपॉजिटरी से एक संशोधन (और किसी भी वंशज) को हटा देगा।

पट्टी का उपयोग करने के लिए आपको निम्नलिखित पंक्तियों को अपने .hgrc (या mercurial.ini) में जोड़कर MqExtension स्थापित करना होगा :

[extensions]
mq =

TortoiseHg में स्ट्रिप कमांड कार्यक्षेत्र में उपलब्ध है। एक संशोधन पर राइट क्लिक करें और 'इतिहास संशोधित करें' -> 'पट्टी' चुनें।

stripरिपॉजिटरी के इतिहास को बदलने के बाद से आपको इसे केवल उन संशोधनों पर उपयोग करना चाहिए जिन्हें अभी तक किसी के साथ साझा नहीं किया गया है। यदि आप मर्क्यूरियल 2.1+ का उपयोग कर रहे हैं तो आप इस जानकारी को ट्रैक करने के लिए चरणों का उपयोग कर सकते हैं। यदि कोई प्रारूप अभी भी मसौदा चरण में है, तो इसे अन्य रिपॉजिटरी के साथ साझा नहीं किया गया है ताकि आप इसे सुरक्षित रूप से पट्टी कर सकें। (इसे इंगित करने के लिए ज़ासुरस का धन्यवाद)।


2
यदि विचाराधीन संशोधन अभी भी ड्राफ्ट वाक्यांश में है (या आपके पास रेपो के सभी तक पहुंच है जो कि उन सभी के लिए स्ट्रिप को धक्का / खींच दिया गया है और लागू होता है) (जो इस विवरण में मामला है) तो यह है सबसे अच्छा और साफ विकल्प sooo।
गजब

4
यदि आपने TortoiseHg स्थापित किया है, तो विश्व स्तर पर सक्रिय mq के लिए एक चित्रमय इंटरफ़ेस है। वर्तमान संस्करण में: "फ़ाइल-> सेटिंग्स-> वैश्विक सेटिंग टैब-> एक्सटेंशन-> mq" सक्षम करें या "फ़ाइल संपादित करें" बटन के माध्यम से सेटिंग फ़ाइल तक पहुंचें।
डेविड

19

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

इसलिए यदि आपने खींच लिया है और उनके सिर को अद्यतन किया है तो आप ऐसा कर सकते हैं:

hg --config ui.merge=internal:local merge

वर्तमान में चेक किए गए संशोधन में सभी बदलावों को रखता है, और चेक-आउट किए गए संशोधन में कोई भी बदलाव नहीं करता (आपने जो लिखा था कि आप अब नहीं चाहते हैं)।

यह इसे करने का एक शानदार तरीका है क्योंकि यह आपके इतिहास को सटीक और पूर्ण रखता है। अगर अब से 2 साल बाद किसी ने आपके द्वारा खींची गई चीज़ में बग ढूंढ लिया तो आप उसी चीज़ को अपने (अप्रयुक्त लेकिन सहेजे हुए) कार्यान्वयन में देख सकते हैं और जा सकते हैं, "ओह, मैंने इसे सही किया"। :)


5

hg rollback तुम क्या चाहते हो

TortoiseHg hg rollbackमें, प्रतिबद्ध संवाद में निपुण है। प्रतिबद्ध संवाद खोलें और "पूर्ववत करें" चुनें।

वैकल्पिक शब्द


1
मैंने कमिट किया, फिर एक पुल और अपडेट / सिंक। इन नए बदलावों के साथ मुझे लगा कि मैंने फैसला किया है कि मेरा आखिरी कमिट ओबस्लेट है और इसे पूर्ववत करना चाहते हैं। मेरे मामले में TortoiseHg में पूर्ववत करें बटन अक्षम है।
मार्टिन बुबर्ल

रोलबैक अब हटा दिया गया है।
द सेक्रिक

Tortoise HG के वर्तमान संस्करण में आप रिपॉजिटरी मेनू आइटम से रोलबैक / पूर्ववत विकल्प प्राप्त कर सकते हैं।
daveywc

@UpTheCreek प्रशस्ति पत्र की जरूरत है।
डैनमैन

@ डनमैन - उसके द्वारा दिए गए लिंक की जाँच करें।
उपराष्ट्रपति

3

TortoiseHg Workbench 4.4.1 (07.2018) के वर्तमान संस्करण में आप उपयोग कर सकते हैं Repository- Rollback/undo...:
यहाँ छवि विवरण दर्ज करें


1

इसका समाधान है।

यदि आप सर्वर पर नहीं जाते हैं, तो आप अपने रिपॉजिटरी फ़ोल्डर से नए फ़ोल्डर वॉशआउट (सभी फ़ाइलों को हटाएं) और नए क्लोन में क्लोन करेंगे।


0

आपके द्वारा अपने कार्यक्षेत्र को खींचे जाने और अद्यतन करने के बाद, आप जिस परिवर्तन से छुटकारा चाहते हैं, उस पर एक thg और राइट क्लिक करें और फिर इतिहास -> पट्टी को संशोधित करें पर क्लिक करें, यह परिवर्तन सेट को हटा देगा और आप डिफ़ॉल्ट टिप को इंगित करेंगे।

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