2012-10-28 5 views
38

क्यामर्क्युरियल (Hg) Git रीसेट के बराबर (--mixed या --soft)

git reset --mixed HEAD^ 

या

git reset --soft HEAD^ 

यानी मैं चाहता हूँ के लिए एक बराबर तेज आदेश (या कार्यप्रवाह) होगा काम करने वाले पेड़ को बरकरार छोड़ दें लेकिन भंडार को वापस राज्य में प्राप्त करें जो अंतिम प्रतिबद्धता से पहले था। आश्चर्य की बात है कि मुझे स्टैक ओवरफ्लो या Google के साथ कुछ भी उपयोगी नहीं मिला।

ध्यान दें कि मैं

hg rollback 

उपयोग नहीं कर सकते के रूप में मैं कुछ इतिहास पिछले के बाद HistEdit का उपयोग कर के लिए प्रतिबद्ध पुनर्लेखन किया है।

जोड़ा स्पष्ट करने के लिए: कुछ रिबेसिंग और इतिहास संपादन मैं एक < --B < --C के साथ समाप्त हो गया था के बाद। फिर मैंने बी और सी को स्क्वैश करने के लिए हिस्टएडिट का उपयोग किया, ए < - सी 'प्राप्त किया। अब मैं प्रतिबद्ध सी को विभाजित करना चाहता हूं '(मैंने बी में गलत फाइलें की हैं)। मुझे यह पता लगाने का सबसे आसान तरीका यह था कि रिपॉजिटरी को राज्य ए को वापस लेना था (जो हाथ से पहले सभी रिबेजिंग और इतिहास संपादन के कारण तकनीकी रूप से कभी भी अस्तित्व में नहीं था) और सी के राज्य में काम करने वाला पेड़ और फिर दो कर रहा था करता है।

उत्तर

55

सही तरीके से git reset --soft HEAD^ को दोहराने के लिए (काम कर रहे नकल में वर्तमान के लिए प्रतिबद्ध है, लेकिन रखने के परिवर्तनों को पूर्ववत) है:

hg strip --keep -r . 

-1 केवल तभी प्रतिबद्ध आप उन्हें हटाना चाहते आखिरी कि प्रवेश किया प्रतिबद्ध है काम करेंगे भंडार . वर्तमान में चेक आउट प्रतिबद्धता को संदर्भित करता है, जो निकटतम समकक्ष Mercurial है Git's HEAD है।

ध्यान दें कि यदि . में वंशज हैं, तो वे भी दूर हो जाएंगे। आप रखना चाहते हैं, तो चारों ओर प्रतिबद्ध है, तो एक बार आप प्रतिबद्ध आईडी है, तो आप के बजाय कर सकते हैं:

hg update .^ 
hg revert --all -r <commit id> 

यह प्रतिबद्ध के माता-पिता के लिए अद्यतन और फिर कम से संस्करणों के साथ काम कर रहे नकल में फ़ाइलों का स्थान ले लेगा वह प्रतिबद्ध है।

+0

नोटिस: इस एचजी के एमक्यू एक्सटेंशन की आवश्यकता है। –

+2

Mercurial 2.8 और बाद में एक समर्पित [स्ट्रिप एक्सटेंशन] (https://www.mercurial-scm.org/wiki/StripExtension) के साथ आता है। – fhd

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