Git - गलत शाखा पर काम करना - मौजूदा विषय शाखा में परिवर्तन की प्रतिलिपि कैसे बनाएं


333

मैं एक परियोजना पर काम कर रहा हूं, लेकिन दुर्भाग्य से, मैं अपनी शाखा में स्विच करना भूल गया , और जैसे कि मैं मास्टर पर काम कर रहा हूं

मैं कैसे काम कर सकता हूं (3 फाइलें) मैंने यहां मास्टर से अपनी शाखा (जिसे उदाहरण के लिए शाखा 123 के लिए कहा जाता है) में काम किया है ?

जवाबों:


540

लगता है कि आप सभी की जरूरत है निम्नलिखित है:

git stash
git checkout branch123
git stash apply

फिर आपको मास्टर शाखा को छूने के बिना अपनी शाखा पर वापस होना चाहिए।


6
ठीक है- मैंने उसे दौड़ाया, लेकिन जब मैं मास्टर (git चेकआउट मास्टर) पर वापस जाता हूं और git स्टेटस चलाता हूं, तो वही फाइलें अभी भी "संशोधित" हैं - क्या यह अपेक्षित है?
एलेक्स

5
यदि आपकी स्थानीय शाखा (मास्टर) और विषय शाखा (ब्रांच -123) के बीच अंतर उन फ़ाइलों में से किसी में नहीं है, जिन्हें आपने स्थानीय स्तर पर संशोधित किया है, तो आपको वास्तव में स्टैश नहीं करना पड़ सकता है। Git आपको उस मामले में केवल विषय शाखा की जाँच करने देगा।
कास्कैबेल

3
@ एलेक्स: हाँ, यह अपेक्षित है। इसमें कमिट शामिल नहीं है। stashस्थानीय संशोधनों को दूर करता है, फिर stash applyउन्हें वापस लाता है।
कास्कैबेल

6
मैं कैसे मास्टर शाखा से उनमें से "छुटकारा" कर सकता हूं?
एलेक्स

7
git reset --hard HEADऔर आप अपने मास्टर ब्रांच में आपके द्वारा किए गए अंतिम कमिटमेंट के लिए वापस आ गए हैं।
gnab

46

स्वीकृत उत्तर सबसे गहन है, लेकिन एक विशेष मामला है जहां आप सरल कर सकते हैं। यदि आपके द्वारा काम की निर्देशिका में संशोधित की गई फाइलें दोनों में समान हैं masterऔर branch123आप बस कर सकते हैं

git checkout branch123

डिफ़ॉल्ट कार्य करने की कोई ज़रूरत नहीं है, क्योंकि checkoutआपकी कार्यशील निर्देशिका में संशोधित फ़ाइलों को अधिलेखित नहीं करना है, इसलिए आपको कुछ भी नहीं खोना होगा। (यह वास्तव में Cascabel द्वारा टिप्पणियों में पहले उल्लेख किया गया था)

जैसा कि अन्य लोगों ने टिप्पणियों में उल्लेख किया है, अगर branch123अभी तक मौजूद नहीं है, तो आप कर सकते हैं

git checkout -b branch123

मुझे यहां जो मिला, उसके आधार पर ।


3
या, यदि आप एक नई शाखा बनाना चाहते हैं,git checkout -b newbranch
फिल मिशेल

2
यह मेरे लिए स्टैश से बेहतर काम कर रहा है और यह बहुत आसान है। धन्यवाद!
मथायस

31
नहीं यह काम नहीं करता है। Git आपको यह संदेश दिखाएगा: "अपने परिवर्तनों को प्रतिबद्ध करें या शाखाओं को स्विच करने से पहले उन्हें दबाएं।"
8

1
@DegenSharew: हां, आप कुछ मामलों में सही हैं, अर्थात्, यदि आपके द्वारा कार्यशील निर्देशिका में संशोधित की गई फ़ाइलें समान नहीं हैं masterऔर branch123। मेरा संपादित उत्तर देखें।
रसेल डिर्क

1
यह मेरे लिए बहुत अच्छा काम किया। मेरे पास अभी तक एक शाखा नहीं थी, इसलिए मैंने ऐसा किया: git checkout -b newbranchname। मेरे परिवर्तन अपने आप उस शाखा में दिखाई दिए।
dex3703


0

जैसा कि एक नई शाखा बनाना संभव है, लेकिन मौजूदा शाखा की जांच करना संभव नहीं है, जबकि फाइलों की जांच की जा रही है, मुझे काम करने के लिए एक अस्थायी शाखा का उपयोग करते हुए निम्नलिखित चाल मिली:

यह परिदृश्य कम से कम VS 2015 Git प्लगइन के साथ काम करता है, लेकिन किसी भी git टूल के साथ सबसे अधिक संभावना काम करेगा।

  1. चेकआउट करें और मास्टर में फ़ाइलों में परिवर्तन करें (अप!, गलत शाखा)
  2. मास्टर से एक नई शाखा "अस्थायी" (या कोई भी अप्रयुक्त नाम चुनें) बनाएं। जाँच की गई फ़ाइलें अब अस्थायी और मास्टर में नहीं जाँच की जाएँगी।
  3. अस्थायी परिवर्तन में जाँच (मास्टर अछूता है)
  4. अब सब कुछ जाँच लिया गया है और मौजूदा शाखा की जाँच करना संभव है। वांछित शाखा की जाँच करें (जिस शाखा को मैं शुरू करने के लिए परिवर्तन करना चाहता था) 3.5 Git Rebase
  5. वांछित शाखा में अस्थायी विलय। अब परिवर्तन सही शाखा में हैं।
  6. अस्थायी शाखा को हटा दें क्योंकि इसकी कोई आवश्यकता नहीं है

संपादित करें: मुझे पता चला है कि आपको मर्ज करने से पहले अस्थायी शाखा का रिबास (गिट रिबास - सेंटो) करना होगा। अन्यथा मास्टर में परिवर्तन मर्ज में शामिल किया जाएगा। एक अतिरिक्त चरण 3.5 ऊपर। आगे देखें रिबास के बारे में यहाँ: https://git-scm.com/book/en/v2/Git-Branching-Rebasing


क्या आप प्रदान किए गए समाधान के बारे में थोड़ा और विवरण जोड़कर अपने जवाब को विस्तृत कर सकते हैं?
अबरिसोन

आपकी प्रतिक्रिया के लिए धन्यवाद। समाधान हालांकि काफी सरल है और "स्टैश" समाधान के समान सिद्धांत का पालन करता है, सिवाय इसके कि एक अस्थायी शाखा का उपयोग स्टैश के बजाय किया जाता है। विजुअल स्टूडियो उपयोगकर्ताओं के लिए यह कम से कम सुविधाजनक है क्योंकि जीआईटी प्लगइन द्वारा समर्थित नहीं है
पासी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.