2011-02-28 7 views
11

में गलत नामित शाखा पर आकस्मिक रूप से कार्य करना मैं अपनी कार्यशील निर्देशिका में कुछ बदलाव कर रहा हूं, और देखा कि मैं गलती से गलत शाखा पर काम कर रहा हूं। मैंने अभी तक कुछ भी नहीं किया है, और मैं अपनी अगली प्रतिबद्धता को दूसरी शाखा के खिलाफ जाना चाहता हूं। इसे करने का बेहतरीन तरीका क्या है?Mercurial

उत्तर

17

शेल्व एक्सटेंशन आपको दुःख दे सकता है, और यह पूरी तरह से Mercurial कमांड के साथ किया जा सकता है। Krtek लगभग था लेकिन वह diff के बजाय export का इस्तेमाल किया। इसे आज़माएं:

hg diff --git > ~/saved-work.patch 
hg update --clean desiredbranch 
hg import --no-commit ~/saved-work.patch 
+0

हां, 'एचजी selve', पैच-queues et al। काम नहीं कर रहे हैं और आपको वास्तव में दुःख देते हैं!उपरोक्त यह समाधान वास्तव में एक अच्छा अभ्यास है। – math

1

अगर यह सबसे अच्छा समाधान है मैं नहीं जानता, लेकिन आप इन चरणों का पालन कर सकते हैं:

1 ° hg diff --git > modifications.patch

2 ° hg update -C the_right_branch

3 ° hg patch modifications.patch

शायद यह है संशोधनों की प्रतिलिपि बनाने के लिए बेहतर। कहीं भी सुरक्षित, कहीं भी सुरक्षित।

संपादित करें: निर्यात के बजाय diff के साथ अद्यतन करें। टिप्पणी करने वालों के लिए धन्यवाद।

+0

क्या इस पैच में केवल असामान्य परिवर्तन शामिल होंगे? जिस शाखा में मैं काम कर रहा हूं, उसमें बहुत सारे अंतर हैं जो पहले से ही उस शाखा से पहले ही किए जा चुके हैं, जिसका मतलब था। –

+1

इसे निर्यात नहीं किया जाना चाहिए यह अलग होना चाहिए। –

+0

हाँ सही, निर्यात किसी दिए गए संशोधन के लिए है, कामकाजी निर्देशिका के वर्तमान संशोधन नहीं, मैं अपनी पोस्ट अपडेट करूंगा। – krtek

3

आपको केवल hg up otherbranch पर सक्षम होना चाहिए। यह महत्वपूर्ण है कि आप hg up पर या तो सीधे या उपनाम के माध्यम से --clean विकल्प का उपयोग न करें क्योंकि यह आपके अपरिचित परिवर्तनों को त्याग देगा।

एक और विकल्प hg shelve प्रदान करने वाले एक्सटेंशन में से एक का उपयोग करना है। प्रक्रिया तो होगा:

$ hg shelve --all 
$ hg up otherbranch 
$ hg unshelve 

कि .hg निर्देशिका के भीतर आपके परिवर्तनों का पैच का निर्माण करेगा, एक साफ राज्य के लिए अपने काम निर्देशिका लौटने, 'otherbranch' करने के लिए स्विच, और फिर बचाया पैच लागू होते हैं।

+0

मुझे यह एक्सटेंशन नहीं पता था, धन्यवाद, यह मेरे अपने उत्तर से आसान है :) – krtek

+1

Krtek, आपका उत्तर बेहतर था। एक कारण के लिए शेल्व Mercurial के साथ भेज दिया नहीं है। इसमें अतिरिक्त फ़ाइलों के साथ कठिन समय है, नई सुविधाओं का समर्थन नहीं करता है, और यदि शेल्व नए स्थान पर स्पष्ट रूप से लागू नहीं होता है तो इसका एक भयानक वर्कफ़्लो होता है। –

+0

@ Ry4an जानकारी के लिए धन्यवाद। मैंने अलमारियों के भयानक वर्कफ़्लो का अनुभव किया है जब यह स्पष्ट रूप से भी लागू नहीं हो सकता है। ऐसा लगता है कि एक ऐसा एक्सटेंशन होना चाहिए जो शेल्व जैसा व्यवहार प्रदान करता हो लेकिन दृश्यों के पीछे आपके diff/import कमांड करता है - केवल उपनाम के साथ भी संभव हो सकता है। –