2013-12-12 5 views
23

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

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

इसके अलावा, एक और परिदृश्य - मैं काम और घर दोनों पर काम करता हूं। अगर मैं घर जाना चाहता हूं तो मैं प्रतिबद्धता के साथ तैयार नहीं हूं, क्या मैं अपना काम छीन सकता हूं, इसे गिटहब पर धक्का दे सकता हूं और फिर घर पर उस छिद्र को खींच सकता हूं?

उत्तर

31

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

एक ही स्थान पर रहा stashing पसंद करते हैं अगर मैं की खोज मैं में कुछ भूल गया है मेरा आखिरी प्रतिबद्ध और पहले से ही एक ही शाखा में अगले एक पर काम करना शुरू कर दिया है:

# Assume the latest commit was already done 
# start working on the next patch, and discovered I was missing something 

# stash away the current mess I made 
git stash save 

# some changes in the working dir 

# and now add them to the last commit: 
git add -u 
git commit --ammend 

# back to work! 
git stash pop 
1

स्टैश कमांड आपके आखिरी प्रतिबद्धता के बाद से किए गए किसी भी बदलाव को रोक देगा। अगर आपके पास अगले दिन काम करना जारी रहेगा तो आपके मामले में छेड़छाड़ करने का कोई कारण नहीं है। मैं केवल उन्हीं परिवर्तनों को पूर्ववत करने के लिए स्टैश का उपयोग करता हूं जिन्हें आप प्रतिबद्ध नहीं करना चाहते हैं।

+0

नहीं, 'गिट स्टैश' आपकी शाखा नहीं बदलेगी। यह विशेष रूप से किसी भी प्रतिबद्ध परिवर्तन को "वापस नहीं" करेगा। यह केवल (अस्थायी) आपकी फ़ाइलों पर किसी भी असामान्य परिवर्तन को त्याग देगा। - यह picky प्रतीत हो सकता है, लेकिन गिट के संदर्भ में उन तरह के शब्दों का एक बहुत ही खास अर्थ है। आपको वास्तव में उनको मिश्रण नहीं करना चाहिए। – michas

+0

इसे इंगित करने के लिए धन्यवाद। मैंने तदनुसार अपना जवाब बदल दिया। – Severin

+0

गिट में एक "शाखा" को काम की श्रृंखला के रूप में परिभाषित किया जाता है। 'गिट स्टेश' किसी भी काम को छूएगा और इसलिए किसी भी शाखा को संशोधित नहीं करेगा। यह किसी शाखा से कुछ भी "हटा" नहीं देगा, यह इसे किसी भी तरह से "रीसेट" नहीं करेगा। शाखा वही रहती है, केवल काम करने वाले पेड़ में फाइलें बदलती हैं। - वे दो पूरी तरह से अलग चीजें हैं। – michas

0

यदि आप git stash मारा जब आपके पास कामकाजी प्रति में परिवर्तन (स्टेजिंग क्षेत्र में नहीं), गिट एक स्टैस्ड ऑब्जेक्ट बनाएगा और स्टैश के ढेर पर धक्का देगा (जैसे आपने git checkout -- . किया था लेकिन आप परिवर्तन नहीं खोएंगे)। बाद में, आप ढेर के शीर्ष से पॉप कर सकते हैं।

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