2015-08-31 8 views
5

इंटेलिज की एक विशेषता है जो सिद्धांत में बहुत अच्छी है, जिसे Smart Checkout कहा जाता है। यह सुविधा तब बदलती है जब आप शाखाएं बदल रहे हैं और आपके पास वर्तमान शाखा में फ़ाइलें हैं जिन्हें आपने संशोधित किया है लेकिन प्रतिबद्ध नहीं है।पूर्ववत इंटेलिज स्मार्ट चेकआउट

आपको अपने परिवर्तनों को छेड़छाड़ करने, छेड़छाड़ करने या ढंकने के लिए मजबूर करने के बजाय, यह आपको उनके लिए धक्का देता है, शाखाओं को स्विच करता है, फिर नई शाखा में stash pop चलाता है।

मुझे लगता है कि यह वही है जो आप कभी-कभी चाहते हैं, लेकिन गलत शाखा में स्विच करते समय मैंने इसे चलाया।

तो, अब मेरी master शाखा किसी अन्य शाखा में मौजूद परिवर्तनों से भरी हुई है, कुछ फाइल विलय विवादों की रिपोर्ट कर रही हैं, और मेरे पास सभी प्रकार के दर्द हैं।

क्या मैं करना चाहते है:

  1. सफाई मास्टर शाखा से परिवर्तन निकालें।
  2. उन्हें वापस उस शाखा में ले जाएं जहां मैं काम कर रहा था।

क्या ऐसा करने का कोई तरीका है?

+0

वैसे, इन परिवर्तनों को खोना बहुत दर्दनाक है .... कई दिन का काम। मुझे उन्हें वापस लेना अच्छा लगेगा। – mlissner

+2

इस तरह का जादू ठीक है, मैं केवल पढ़ने के संचालन के लिए आईडीई वीसीएस एकीकरण का उपयोग करना पसंद करता हूं और कमांड लाइन पर हमेशा जोड़ता हूं, छेड़छाड़ करता हूं, प्रतिबद्ध करता हूं। वैसे भी, आप स्टैश किए गए परिवर्तनों को पुनर्प्राप्त कर सकते हैं (यहां SO से संबंधित कई प्रश्न हैं, उदाहरण के लिए http://stackoverflow.com/questions/89332/how-to-recover-a-dropped-stash-in-git) आसानी से उपयोग कर रहे हैं गिट यूटिलिटीज – ThiefMaster

+0

एटलसियन सॉर्सेट्री जैसे टूल का उपयोग करके आपको चेतावनी दी जाएगी कि आपके स्थानीय परिवर्तन चेकआउट द्वारा ओवरराइट किए जाएंगे, जो इस स्थिति से बचेंगे! मुझे लगता है कि गिट उपकरण जैसे कमांड एक ही काम कर सकते हैं लेकिन मैं 100% निश्चित नहीं हूं। – mvd

उत्तर

5

यहां कम से कम एक आंशिक उत्तर है जो काम करता है यदि आपके पास stash pop के दौरान विलय संघर्ष था। जैसा कि मेरे प्रश्न में बताया गया है, stash स्मार्ट चेकआउट सुविधा द्वारा आपके स्थानीय परिवर्तनों को छीनने के लिए उपयोग किया जाता है, और फिर चेक आउट होने के बाद उन्हें नई शाखा में लागू करने के लिए उपयोग किया जाता है।

इंटेलिज ऐसा करता है जिस तरह से आप वर्तमान में मौजूद शाखा में stash का उपयोग करके और फिर उस शाखा में stash pop का उपयोग करके स्विच कर रहे हैं।

जब परिवर्तन छीन दिए जाते हैं, तो वे शीर्ष पर, छेड़छाड़ किए गए परिवर्तनों के ढेर पर डाल देते हैं। फिर, जब stash pop रन, तो वे परिवर्तन ढेर से निकलते हैं और लागू होते हैं।

कम से कम, ज्यादातर मामलों में, ऐसा होता है। यदि कोई विलय संघर्ष है, हालांकि, इंटेलिज आपको इस बारे में सूचित करता है और छेड़छाड़ की जाती है। आप चलाकर stashes के ढेर देख सकते हैं:

git stash list 

गुप्त कोष में आप चाहते हैं अभी भी सूचीबद्ध है, तो आप कर बस शाखा आप मूल रूप से पर थे चेकआउट है सकते हैं। इसे रीसेट करें, फिर stash apply करें, जो stash pop जैसा है, लेकिन सूची से छेड़छाड़ को नहीं हटाता है। तो:

git checkout $original-branch 
git reset HARD 
git stash apply 

तो फिर, अगर सब कुछ ठीक है, आप के साथ गुप्त कोष निकाल सकते हैं:

git stash drop 

के बाद से इस सवाल का जवाब बहुत किसी न किसी तरह है और केवल एक ही स्थिति को शामिल किया गया है, मैं एक समुदाय विकी के रूप में चिह्नित कर रहा हूँ । सुधार बहुत स्वागत है।

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