प्रति शाखा अनोखा संघर्ष क्यों नहीं है?


81

मुझे लगता है कि यह एक शाखा से दूसरी में परिवर्तन करने की अनुमति देता है, लेकिन यह है कि चेरी लेने के लिए क्या है और यदि आप अपने परिवर्तनों के लिए प्रतिबद्ध नहीं कर रहे हैं, तो शायद आप उन्हें चारों ओर नहीं ले जाना चाहिए?

मैंने इस अवसर पर गलत शाखा में गलत स्टेश लगाया है, जिसने मुझे इस प्रश्न के बारे में आश्चर्यचकित कर दिया।


13
गिट कुछ याद कर रहा है, जो आपको एक शाखा (या सिर) के साथ असम्बद्ध परिवर्तनों को संबद्ध करने की अनुमति देता है। यह तब स्पष्ट हो जाता है जब आपके पास एक समय में एक से अधिक शाखाओं के लिए प्रगति होती है। जैसा कि यहाँ उत्तर बताते हैं, स्टैश के पास अपनी विशेषताओं के आधार पर उपयोगी अनुप्रयोग हैं। git stash-hereकिसी को?
टेलर

जवाबों:


69

जैसा कि उल्लेख किया गया है, यदि आप "प्रति-शाखा स्लैश" चाहते हैं, तो आप वास्तव में एक नई शाखा चाहते हैं जो मौजूदा शाखा से दूर है।

इसके अलावा, पहले से ही उल्लेखित तथ्य के अलावा कि स्टेश आपको उस शाखा में खींचने की अनुमति देता है जिस पर आप काम कर रहे हैं, यह सब कुछ करने से पहले आपको शाखाओं को स्विच करने की भी अनुमति देता है । यह सामान्य अर्थों में चेरी-पिकिंग के लिए उपयोगी नहीं है, जितना चेरी अपनी वर्किंग कॉपी को चुनने के लिए ।

F.ex., एक सुविधा शाखा पर काम करते समय, मैं अक्सर कोड में मामूली कीड़े या कॉस्मेटिक अशुद्धियों को नोटिस करूंगा जो उस शाखा के लिए प्रासंगिक नहीं हैं। खैर, मैं अभी उन लोगों को ठीक करता हूं। जब समय बीतने का समय आता है, तो मैं चुनिंदा बदलावों और सौंदर्य प्रसाधनों के अनुसार प्रासंगिक बदलाव करता हूं। इसके बजाय मैं उन लोगों को मारता हूं, जो मुझे अपनी मामूली-फिक्स-ऑन-स्थिर शाखा पर स्विच करने की अनुमति देते हैं, जहां मैं फिर से स्टैश लगा सकता हूं और प्रत्येक मामूली फिक्स को अलग-अलग कर सकता हूं। (प्रश्न में परिवर्तन के आधार पर, मैं उनमें से कुछ को फिर से अलग कर दूंगा, एक अलग सुविधा शाखा में जाने के लिए, जहां मैं उन लोगों को देखता हूं ।)

जब मैं काम कर रहा हूं तो यह मुझे प्रोग्रामिंग मोड में जाने की अनुमति देता है, और अपने कोड की उचित लाइब्रेरियनशिप के बारे में चिंता नहीं करता। फिर जब मैं मानसिक विराम लेता हूं, तो मैं वापस जा सकता हूं और ध्यान से सभी सही अलमारियों में अपने बदलावों को हल कर सकता हूं।

यदि स्टैश वैश्विक नहीं थे, तो इस प्रकार के वर्कफ़्लो करना अधिक कठिन होगा।


4
मैं इस बात से सहमत नहीं है: As mentioned, if you want a “per-branch stash,” you really want a new branch forking off from the existing branch.। विशेष रूप से, मैं अक्सर एक ही कार्यक्रम के दो संस्करणों के बीच स्विच करता हूं, और पूर्ण चलने में make10 मिनट लगते हैं; निर्मित बायनेरिज़, प्रति-शाखा को छिपाने में सक्षम होने के नाते, बहुत अच्छा होगा। और मैं निश्चित रूप से लॉग में या एक शाखा में बायनेरिज़ नहीं चाहता।
क्लेमेंट

क्यों? (मुझे लगता है कि आप ऐसा करते हैं, आप इसे नहीं जानते।)
अरस्तू पगलतज़िस

21

Git 1.6 के रूप में, अब आप शाखाओं का उपयोग करके स्टैड्स लागू कर सकते हैं

git stash branch name_of_new_branch

Git आपके लिए नई शाखा बनाएगा, और इसे देखेगा! अधिक जानकारी के लिए देखें

मैं अनुमान लगा रहा हूँ कि आप उपयोग करने के चारों ओर गति कर सकते हैं

git stash branch <branch | new_branch> [<stash>]

और आपके स्टैम्स की सूची देखने के लिए, उपयोग करें

git stash list

संदर्भ


धन्यवाद! मुझे इस बात की जानकारी नहीं थी कि आप शाखाओं के लिए स्टैड लागू कर सकते हैं, लेकिन यह सब के बाद का व्यवहार प्रतीत होता है। एक शाखा पर धक्के लगाने के बाद मैंने दूसरी शाखा की जाँच की और वहाँ कुछ काम किया। जैसा कि यह पता चला है कि मुझे इसके कुछ लंबित परिवर्तनों को भी रद्द करने की आवश्यकता थी, इससे पहले कि मैं मास्टर को पुन: स्थापित कर सकूं। मेरे अपडेट किए गए " gitk --all" अब मेरा पहला स्टैश नहीं दिखा; मैंने सोचा था कि यह बंद हो सकता है। दूसरी शाखा में मेरा काम पूरा होने के बाद मैंने उस स्टैश को पॉप किया। उसके बाद, मेरे अपडेट किए गए " gitk --all" मूल स्टैश को फिर से दिखाया गया।
डैनियल मिलादिनोव

17

यदि आप एक "स्लैश" चाहते हैं जो एक शाखा को चलाता है तो अपनी वर्तमान शाखा से एक नई शाखा पर अपने परिवर्तनों को संग्रहीत करने के लिए कुछ ऐसा करें।

git checkout -b new_stash
git commit -a -m "stashed changes"

पूर्ववत करने के लिए

git reset HEAD^
git branch -d new_stash

गिट स्टैश विशेष रूप से उपयोगी है क्योंकि आप एक गंदे पेड़ में परिवर्तन खींच सकते हैं, अर्थात यदि आपके पास उत्कृष्ट संपादन हैं और आप ए करना चाहते हैं

git pull

और आप नहीं कर सकते हैं, आप अपने परिवर्तनों को रोक सकते हैं, खींच सकते हैं और फिर स्टैश लगा सकते हैं

git stash
git pull
git stash apply
git stash clear

उम्मीद है कि इस मदद की!


क्या होगा यदि आप जिस सामान को छिपाने की कोशिश कर रहे हैं, उदाहरण के लिए, makeउस शाखा में चलने वाले बायनेरिज़ का एक गुच्छा ? (प्रति-शाखा स्लैश अगली बार जब आप उस शाखा में एक वृद्धिशील निर्माण करते हैं तो समय की बचत होगी, लेकिन आप निश्चित रूप से सूचकांक में बायनेरिज़ जोड़ना नहीं चाहते हैं)
क्लेमेंट

5

git-stash मेरे लिए सबसे उपयोगी है कि अभी तक चेक-इन करने के लिए अलग-अलग शाखा में परिवर्तन नहीं किया जा सकता है।

उदाहरण के लिए - मैं अक्सर खुद को बग-फिक्स शाखा पर सरल बदलाव करता हुआ पाता हूं; केवल यह पता लगाने के लिए कि मैं जिस बदलाव पर काम कर रहा हूं, वह मेरे पहले अनुमान से कहीं अधिक जटिल है। Git-stash एक अलग शाखा में परिवर्तन के उस सेट को स्थानांतरित करने का सबसे आसान तरीका है।

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