नई शाखा में परिवर्तन परिवर्तन


349

मैं मास्टर ब्रांच पर काम कर रहा था, कुछ बदलाव किए और फिर उन्हें स्टैक्ड कर दिया। अब, मेरा गुरु HEAD में है।

लेकिन अब, मैं इन परिवर्तनों को पुनः प्राप्त करना चाहता हूं लेकिन एक नई शाखा के लिए जो मास्टर शाखा के हेड संस्करण से शाखाएं।

मैं यह कैसे करु ?


3
मुझे लगता है कि आप इसे ढूंढ रहे हैं? stackoverflow.com/questions/556923/…
zx1986

जवाबों:


506

क्या मानक प्रक्रिया काम नहीं कर रही है?

  • परिवर्तन करें
  • git stash save
  • git branch xxx HEAD
  • git checkout xxx
  • git stash pop

छोटा:

  • परिवर्तन करें
  • git stash
  • git checkout -b xxx
  • git stash pop

8
@sfletche यदि आप अपने स्टैश का नाम रखना चाहते हैं तो आपको git stash save <name> करना होगा, अन्यथा, जैसा आप कहते हैं, यह git stash के समान है।
सग्तपुकी

5
इस दृष्टिकोण का उपयोग करने के बाद, ऐसा लगता है कि यदि आप पिछली शाखा में वापस आते हैं, तो स्टैक्ड परिवर्तन वापस आ गए हैं। क्या नई शाखा पर केवल परिवर्तन होना संभव है?
थॉमस हिगिनबॉटम

बस नई शाखा में अपने बदलाव करें।
क्रिस

2
@ThomasHigginbotham कोई कार्य निर्देशिका शाखाओं के बीच आम नहीं है और जब आप एक शाखा से दूसरी शाखा में जाते हैं तो एक से दूसरे में कॉपी की जाती है। "प्राप्त करने के लिए" जो आप चाहते हैं कि मैं आमतौर पर अलग-अलग धाराएं बनाता हूं, git stash save "description"पहले से वर्णित कमांड के साथ उपयोगी विवरण जोड़ रहा है ; और फिर मैं git clearशाखा (वास्तविक कार्य निर्देशिका को ट्रैश करने के लिए) और फिर git stash apply stash@{my_desired_stash}वांछित शाखा में ( git checkout <branch>स्पष्ट रूप से उस पर स्विच करने के बाद )। मुझे पता है कि यह एक वास्तविक समाधान नहीं है, लेकिन सबसे अच्छा है जो आप गिट के साथ कर सकते हैं ।
कामाफेदर

मैं भी साथ इस अंतिम रूप दे दिया git stash dropहै एक बार मैंने इसके लिए हामी था
oddmeter

221

चूँकि आप पहले ही अपने परिवर्तनों को रोक चुके हैं, इसलिए आपको केवल एक-लाइनर की आवश्यकता है:

  • git stash branch <branchname> [<stash>]

डॉक्स ( https://www.kernel.org/pub/software/scm/git/docs/git-stash.html ) से:

बनाता है और एक नई शाखा की जाँच करता है जिसका नाम < branchname > है, जिस पर शुरू से < stash > मूल रूप से बनाया गया था, < stash > में दर्ज परिवर्तनों को नए कार्यशील पेड़ और सूचकांक पर लागू करता है। यदि वह सफल होता है, और < स्‍टैश > फॉर्म स्‍टैश @ {< revision >} का संदर्भ है , तो यह < स्‍टैश > को ड्राप कर देता है । जब न < कसी को > दिया जाता है, तो नवीनतम लागू होता है।

यह उपयोगी है यदि आप जिस शाखा पर गिट स्टैश बचाते हैं वह काफी बदल गया है कि संघर्ष के कारण गिट स्टैश लागू विफल हो जाता है। चूँकि यह स्ट्रैट उस समय के शीर्ष पर लागू होता है, जो उस समय हिट था, जिस समय स्ट्रेट चलाया गया था, यह बिना किसी विरोध के मूल रूप से स्टैक्ड अवस्था को पुनर्स्थापित करता है।


3
सिंगल स्टैड्स के लिए यह जाने का रास्ता है। स्लैश नाम-संदर्भ की आवश्यकता नहीं है क्योंकि Git नवीनतम स्लैश लागू करेगा, नई शाखा में स्विच करेगा और 1 कमांड में स्टाॅश लगाएगा।
sinisterOrange

@RodneyGolpe यह भी 'मास्टर' को छिपाने के लिए लागू होता है? मैं जो करना चाहता हूं, वह 'मास्टर', गिट स्टैश से है, तो मुझे उम्मीद होगी कि 'गेट स्टैश ब्रांच [शाखामूलक] एक नई शाखा में स्टैस लगाने के लिए, एडिट्स के बिना मास्टर को छोड़कर?
डेविड डोरिया

2
@DavidDoria आपको मास्टर में वापस जाने से पहले अपनी नई शाखा में बदलाव करने होंगे।
रोडनी गोलपे

अब जब कि मास्टर के रूप में भी परिवर्तन करने के लिए प्रतिबद्ध है ... मैं वास्तव में एक नुकसान में हूँ ... जाहिर है मैं अभी भी वास्तव में समझ नहीं है। नरम रीसेट मास्टर के बाद फिर रिमोट रेपो से खींचना अब मैं वह हूं जहां मैं होना चाहता था। परिवर्तन से पहले मास्टर राज्य में है। नई शाखा परिवर्तन रखती है।
एकस्टीन

1

यदि आपके कार्यक्षेत्र में कुछ बदलाव हैं और आप उन्हें एक नई शाखा में शामिल करना चाहते हैं, तो इस कमांड का उपयोग करें:

git stash branch branchName

यह कर देगा:

  1. एक नई शाखा
  2. इस शाखा में परिवर्तन करें
  3. और नवीनतम स्‍टैश हटाएं (जैसे: git स्‍टैश पॉप)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.