पूर्ववत संघर्ष पॉप उत्पन्न करता है जिसके परिणामस्वरूप मर्ज संघर्ष होता है


517

मैंने अपने कोडबेस में बदलाव करना शुरू कर दिया, यह महसूस न करके कि मैं एक पुरानी विषय शाखा पर था। उन्हें स्थानांतरित करने के लिए, मैं उन्हें रोकना चाहता था और फिर उन्हें मास्टर की एक नई शाखा में लागू करना चाहता था। मैं git stash popइस नई शाखा में कार्य-में-प्रगति परिवर्तन स्थानांतरित करता था, यह भूलकर कि मैंने नई शाखा बनाने से पहले मास्टर में नए परिवर्तन नहीं खींचे थे। इसके परिणामस्वरूप मर्ज संघर्ष का एक गुच्छा और मेरे परिवर्तनों (जब मैंने पॉप का उपयोग किया था) के एक स्वच्छ स्टेश का नुकसान हुआ।

एक बार जब मैं नई शाखा को सही ढंग से बना लेता हूं, तो मैं उन्हें ठीक से लागू करने के लिए अपने अटके हुए परिवर्तनों को कैसे ठीक कर सकता हूं?

जवाबों:


653

जैसा कि यह पता चला है, अगर यह सफाई से लागू नहीं होता है तो गिट एक स्लैश को छोड़ने के लिए पर्याप्त नहीं है। मैं निम्नलिखित चरणों के साथ वांछित स्थिति में आने में सक्षम था:

  1. मर्ज की गड़बड़ी को रोकने के लिए: git reset HEAD .(अनुगामी डॉट को नोट करें)
  2. विवादित मर्ज को बचाने के लिए (बस मामले में): git stash
  3. गुरु के पास लौटने के लिए: git checkout master
  4. नवीनतम परिवर्तन खींचने के लिए: git fetch upstream; git merge upstream/master
  5. मेरी नई शाखा को सही करने के लिए: git checkout new-branch; git rebase master
  6. सही स्टैक्ड परिवर्तन लागू करने के लिए (अब 2 स्टैक पर): git stash apply stash@{1}

14
उत्कृष्ट धन्यवाद! # 6 वास्तव में वह उत्तर है जिसकी मुझे तलाश थी। git stash dropअंतिम चरण के रूप में # 2 से अवांछित रोक से छुटकारा पाने के लिए जोड़ सकता है ।
ऑस्टिनमार्टन

1
# 2 काम नहीं किया जाएगा अगर वहाँ कोई रास्ता नहीं हैं, तो यह यहाँ वर्णित त्रुटि का उत्पादन करेगा: stackoverflow.com/questions/5483213/…
25tienne

5
पूरी तरह से सच नहीं है - अगर यह सफाई से लागू करने में विफल रहता है, तो गिट स्लैश सूची में बने रहेंगे। इन डॉक्स के बारे में देखें git stash pop: "राज्य को लागू करना संघर्षों के साथ विफल हो सकता है; इस मामले में, इसे स्टैश सूची से हटाया नहीं जाता है। आपको संघर्षों को हाथ से हल करने और git stash dropबाद में मैन्युअल रूप से कॉल करने की आवश्यकता है ।" ( git-scm.com/docs/git-stash )
कैरोलिन कॉनवे

4
अजीब है कि कैसे इस सवाल का जवाब और सवाल पर पोस्ट कर रहे सटीक एक ही मिनट
कॉल-मुझे

13
@ कॉल-मी यह कुछ ऐसा है जो मुझे लगता है कि लोगों को वास्तव में अधिक बार करना चाहिए! ध्यान दें कि "प्रश्न पूछें" फ़ॉर्म में एक चेकबॉक्स है कि चलो उसी रूप में अपने प्रश्न का उत्तर दें :)। यह मेरे साथ कभी-कभी होता है जब मैं एक ऐसे प्रश्न को लिखने की प्रक्रिया में होता हूं जो मुझे रोक रहा है, लेकिन स्टैकऑवरफ्लो के लिए प्रश्न को बेहतर बनाने की कोशिश में, मैं समाधान का पता लगाता हूं। यह कुछ समय पहले था, इसलिए मुझे याद नहीं है कि अगर यहां ऐसा होता, लेकिन मैं अनुमान लगा रहा हूं कि यह क्या हुआ है।
16

339

सौभाग्य से git stash popकरता नहीं एक विवाद की स्थिति में गुप्त कोष में बदल!

तो कुछ भी नहीं, चिंता करने की, बस अपने कोड को साफ़ करें और इसे फिर से आज़माएँ।

कहते हैं कि आपका कोडबेस पहले साफ था, आप उस स्थिति में वापस जा सकते थे: git checkout -f
फिर आप जो सामान भूल गए थे, जैसे git merge missing-branch
कि उसके बाद बस git stash popफिर से आग लगाइए और आपको वही टकराव मिलेगा , जो पहले विवादित था।

ध्यान दें: यह स्टाॅश सुरक्षित है, हालांकि, वर्किंग डायरेक्टरी में अनकम्यूटेड बदलाव नहीं हैं। वे गड़बड़ कर सकते हैं।


16
जो मैं समझता हूं कि आप बस फिर से सफाई और पॉप कर सकते हैं, लेकिन आप इसे पूर्ववत नहीं कर सकते। यदि पॉप अन्य अप्रकाशित परिवर्तनों के साथ मिश्रित हो जाता है, तो आपको मैन्युअल रूप से सफाई करनी होगी।
हरदिवस

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

मेरे लिए ऐसा नहीं था। मैंने git stash popइसे ऑटो-मर्ज करने का प्रयास किया, विवादित और इसे रखा।
ट्रेवर हिक्की

1
@TrevorHickey इस उत्तर की बात यह थी कि टकराव की स्थिति के रूप में यह ठहराव रहता है, जिसे आप git stash popबिना किसी संघर्ष के समाप्त होने तक जितनी बार चाहें, कॉल कर सकते हैं । तो आपके संघर्ष के बाद, हां, काम करने वाली निर्देशिका गड़बड़ है, हालांकि, आप इसे साफ कर सकते हैं और git stash popफिर से कॉल कर सकते हैं ।
फ्लोरी

5
अंतिम चरण लागू करने के लिए पूर्ववत करने के लिए यह आदेश बहुत उपयोगी है git checkout -f:!
लेफी तारिक

16

यहाँ निर्देश थोड़े जटिल हैं इसलिए मैं कुछ और सीधा देने जा रहा हूँ:

  1. git reset HEAD --hard वर्तमान शाखा में सभी परिवर्तनों को छोड़ दें

  2. ... आवश्यक के रूप में मध्यस्थ कार्य करें

  3. git stash pop जब आप तैयार हों तो बाद की तारीख में फिर से स्टैश पॉप करें



8
git checkout -f

काम करना चाहिए, अगर आपकी पिछली स्थिति साफ है।

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