{count, plural, one {कोर्स} other {कोर्स}}
आप अपने डेटा पाइपलाइन में एक नया फ़ीचर लागू करने के बीच में हैं, तभी एक जरूरी बग रिपोर्ट आ जाती है। आपका वर्किंग डायरेक्टरी अधूरे बदलावों से भरी है। आप कमिट करने के लिए तैयार नहीं हैं, लेकिन आपको तुरंत ब्रांच बदलनी है।
इस ट्यूटोरियल में, मैं आपको git stash कमांड सूट का पूरा उपयोग करना सिखाऊंगा। आप सीखेंगे कि Git में स्टैश को कैसे सहेजना, जाँचना, पुनर्स्थापित करना, चयनात्मक रूप से स्टैश करना और साफ़ करना है। आगे सीखने के लिए, मैं हमारी Introduction to GitHub Concepts कोर्स लेने की सलाह देता/देती हूँ, ताकि आप वर्ज़न कंट्रोल और GitHub पर रिपॉज़िटरी के साथ काम करना बेहतर सीख सकें।
Git stash क्या है?
git stash एक Git कमांड है जो आपके बिना कमिट किए गए बदलावों को अस्थायी रूप से शेल्फ पर रख देता है, ताकि आप बिना कोई Git कमिट बनाए एक साफ़ वर्किंग डायरेक्टरी में लौट सकें। इससे ब्रांच बदलना या तुरंत काम संभालना आसान हो जाता है, बिना आपकी प्रगति खोए।
स्टैशेस एक लास्ट-इन, फर्स्ट-आउट (LIFO) स्टैक में स्टोर होते हैं। सबसे हाल का स्टैश हमेशा stash@{0} होता है, उसके बाद stash@{1}, और इसी तरह आगे।
डिफ़ॉल्ट रूप से, git stash संशोधित ट्रैक्ड फ़ाइलें और स्टेज्ड बदलाव (इंडेक्स से) सहेजता है। हालाँकि, यह नई अनट्रैक्ड फ़ाइलों और .gitignore जैसी इग्नोर्ड फ़ाइलों को शामिल नहीं करता।
git stash के साथ बदलाव कैसे सहेजें
इस खंड में, मैं आपको बदलावों को स्टैश करने के तीन सामान्य तरीके दिखाऊँगा/दिखाऊँगी। हम एक समान परिदृश्य मानेंगे: आप data_pipeline.py, config.yaml, और tests/test_pipeline.py फ़ाइलों के साथ एक डेटा पाइपलाइन प्रोजेक्ट पर काम कर रहे हैं।
ट्रैक्ड बदलावों को स्टैश करें
क्योंकि git stash संशोधित या स्टेज्ड बदलावों को सहेजता है, अपने वर्किंग डायरेक्टरी में फ़ाइलों की स्थिति जाँचने के लिए git status चलाएँ। git stash चलाने के बाद, स्टेज्ड और अनस्टेज्ड दोनों ट्रैक्ड बदलाव सहेज लिए जाते हैं, जिससे आपके पास एक साफ़ वर्किंग डायरेक्टरी रह जाती है।

अनट्रैक्ड बदलाव और नई फ़ाइलें शामिल करें
डिफ़ॉल्ट रूप से, git stash उन फ़ाइलों को नज़रअंदाज़ करता है जिन्हें कभी रिपॉज़िटरी में जोड़ा नहीं गया। यदि आपने कोई नई टेस्ट फ़ाइल बनाई है, तो एक मानक स्टैश उसे आपकी डायरेक्टरी में ही छोड़ देगा, जो ब्रांच बदलते समय समस्याएँ पैदा कर सकता है।

यदि आप git stash चलाते हैं, तो वह फ़ाइल बनी रहेगी। उसे शामिल करने के लिए, -u या --include-untracked कमांड का उपयोग करें:
git stash -u

हर एक फ़ाइल को शामिल करने के लिए, जिनमें आपकी .gitignore द्वारा स्पष्ट रूप से इग्नोर की गई फ़ाइलें भी हों, आप git stash --all या -a का उपयोग कर सकते हैं। हालाँकि, आपको सावधानी बरतनी चाहिए, क्योंकि इससे लॉग्स या बिल्ड आर्टिफैक्ट्स जैसी फ़ाइलें अनजाने में भी जुड़ सकती हैं।
अपने स्टैश का नाम दें
जब आप git stash का उपयोग करते हैं, तो WIP on main जैसे डिफ़ॉल्ट संदेश कई स्टैश होने पर उलझनभरे हो सकते हैं। इस समस्या से बचने के लिए, जब भी आप स्टैश को पुश करना चाहें, हमेशा एक वर्णनात्मक संदेश जोड़ें।
git stash push -m "refactor pipeline config handling."
आप git stash list कमांड का उपयोग करके स्टैश सूची देख और तुलना कर सकते हैं। नामित स्टैश और डिफ़ॉल्ट स्टैशेस के बीच का अंतर नोटिस करें।

स्पष्ट संदेशों का उपयोग करने से बाद में सही स्टैश की पहचान करना कहीं आसान हो जाता है, खासकर जब आप कई कार्यों को संभाल रहे हों या टीम के साथ सहयोग कर रहे हों।
मैं हमारे GitHub Foundations और Git Fundamentals स्किल ट्रैक्स आज़माने की सलाह देता/देती हूँ, ताकि आप Git के साथ वर्ज़न कंट्रोल को बेसिक्स से लेकर एडवांस्ड वर्कफ़्लोज़ तक सीखें—बदलावों को ट्रैक करना, रिपॉज़िटरी प्रबंधित करना, और कुशलतापूर्वक सहयोग करना शामिल है।
अपने स्टैशेस को कैसे देखें और जाँचें
बिना सोचे-समझे कोई स्टैश लागू करने से पहले, अंदर क्या है यह जाँचना महत्वपूर्ण है। यह चरण अक्सर छोड़ दिया जाता है, लेकिन यह भ्रम या अनजाने ओवरराइट से बचने में मदद करता है।
git stash list: सभी स्टैशेस की सूची
अपना स्टैश स्टैक देखने के लिए नीचे दिया कमांड उपयोग करें:
git stash list

अब तक आपको पता होना चाहिए कि स्टैशेस LIFO (लास्ट-इन, फर्स्ट-आउट) क्रम का अनुसरण करते हैं। सबसे हाल का स्टैश हमेशा stash@{0} होता है, और हर नया स्टैश पुराने को स्टैक में नीचे धकेलता है।
git stash show: लागू करने से पहले स्टैश का निरीक्षण
स्टैश में बदलावों का त्वरित सारांश पाने के लिए, आप किसी विशेष स्टैश पर show कमांड का उपयोग कर सकते हैं। उदाहरण के लिए, नीचे दिया कमांड नवीनतम स्टैश में किए गए बदलाव दिखाता है:
git stash show stash@{0}

वास्तविक कोड बदलाव (पूरा डिफ़) देखने के लिए, नीचे दिया कमांड उपयोग करें ताकि उस स्टैश में संग्रहीत लाइन-दर-लाइन सभी बदलाव दिख सकें।
git stash show -p stash@{0}

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

pop चलाने के बाद, आपके बदलाव पुनर्स्थापित हो जाते हैं और स्टैश हटा दिया जाता है। इसलिए, pop का उपयोग तब करें जब आप सुनिश्चित हों कि आप उस सहेजे गए स्टेट के साथ काम पूरा कर चुके हैं और अपनी स्टैश सूची को सुव्यवस्थित रखना चाहते हैं।
pop कमांड की गहरी समझ के लिए, हमारा Git Stash Pop ट्यूटोरियल देखें, ताकि आप यह सीख सकें कि अपनी रिपो में ब्रांच बदलते समय बिना कमिट किए काम को कैसे सहेजें।
git stash apply: लागू करें और बनाए रखें
यदि आप बदलावों को पुनर्स्थापित करना चाहते हैं लेकिन स्टैश को पुन: उपयोग के लिए रखना चाहते हैं, तो नीचे दिखाए अनुसार apply कमांड का उपयोग करें:
git stash apply stash@{1}

ध्यान दें कि इंडेक्स stash@{1} द्वारा स्टैश को संदर्भित करने से वही विशेष स्टैश पुनर्स्थापन के लिए लक्ष्य बनता है। यह तरीका तब उपयोगी है जब आप समान बदलावों को कई ब्रांचों पर लागू करना चाहते हैं, जैसे कि कोई साझा कॉन्फ़िग परिवर्तन जिसे main और staging दोनों में जाना है।
आप git stash list का उपयोग कर सकते हैं यह पुष्टि करने के लिए कि apply कमांड उपयोग करने के बाद भी स्टैश मौजूद है।

चयनात्मक रूप से कैसे स्टैश करें
वास्तविक परियोजनाओं में, आपके बदलाव अक्सर आपस में घुले-मिले होते हैं। ऐसे परिदृश्यों में, आप केवल अपने काम का एक हिस्सा स्टैश करना चाह सकते हैं, जबकि बाकी उपलब्ध रहे। Git सूक्ष्म नियंत्रण के लिए दो तरीके प्रदान करता है।
git stash push -m: विशिष्ट फ़ाइलें स्टैश करें
यदि आपको ठीक-ठीक पता है कि किन फ़ाइलों को अलग रखना है, तो आप उनके पाथ निर्दिष्ट करके केवल चयनित फ़ाइलों को स्टैश कर सकते हैं:
उदाहरण के लिए, नीचे दिया कमांड केवल data_pipeline.py फ़ाइल को स्टैश करता है। यह तब उपयोगी है जब आप किसी प्रायोगिक फ़ीचर का काम रोकना चाहते हैं, जबकि बग फिक्स को स्टेज्ड और कमिट के लिए तैयार रखना चाहते हैं।
git stash push -m "stash experimental pipeline logic" data_pipeline.py
यह जाँचने के लिए कि आपका कमांड सफलतापूर्वक चला या नहीं, git status का उपयोग करके अपनी रिपो की पहले और बाद की स्थिति दिखाएँ।

git stash push -p -m: इंटरैक्टिव रूप से विशिष्ट हंक्स स्टैश करें
कभी-कभी, आपके पास उसी फ़ाइल में “अच्छा” कोड और “WIP” कोड दोनों हो सकते हैं। इस स्थिति में, इंटरैक्टिव सत्र ट्रिगर करने के लिए -p या --patch फ़्लैग का उपयोग करें। यह आपको किसी फ़ाइल के भीतर विशिष्ट हिस्सों (“हंक्स”) के बदलाव चुनने देता है।
git stash push -p -m "Selective stash of pipeline logic"

आप “Stash this hunk” आउटपुट इन विकल्पों के साथ देखेंगे:
-
y: हाँ, इस हंक को स्टैश करें -
n: नहीं, इस हंक को छोड़ें -
q: छोड़ें; इस हंक या शेष हंक्स को स्टैश न करें। -
a: सभी; इस हंक और फ़ाइल में आगे के सभी हंक्स को स्टैश करें। -
d: डिलीट; इस हंक या फ़ाइल में आगे के किसी भी हंक को स्टैश न करें। -
?: मदद
ध्यान दें कि यह वर्कफ़्लो git add -p के काफी समान है। यह तब उपयोगी होता है जब एक ही फ़ाइल के भीतर बदलाव असंबंधित हों और उन्हें अलग-अलग तरीके से संभालने की ज़रूरत हो।
अपने स्टैश को कैसे साफ़ करें
स्टैशेस अल्पकालिक होने चाहिए। यदि आप उन्हें ढेर लगने दें, तो बाद में सही स्टैश ढूँढना मुश्किल हो जाएगा और जब आप अंततः उन्हें लागू करेंगे, तो संघर्ष का जोखिम बढ़ जाएगा।
git stash drop: किसी विशिष्ट स्टैश को हटाएँ
किसी एक स्टैश को हटाने के लिए, उसके इंडेक्स के साथ git stash drop का उपयोग करें। उदाहरण के लिए, नीचे दिया कमांड सूची में 4था स्टैश हटाता है।
git stash drop stash@{3}

ऊपर दिए उदाहरण से, आप देख सकते हैं कि स्टैश सूची कम हो गई है, और ड्रॉप के बाद शेष स्टैशेस का पुन: इंडेक्सिंग हो गया है।
git stash clear: सभी स्टैशेस साफ़ करें
एक बार में सभी स्टैशेस हटाने के लिए, उपयोग करें:
git stash clear
यह कमांड सफलता पर कोई आउटपुट नहीं देता, और आप git stash list चलाकर सत्यापित कर सकते हैं।

मैं git stash clear का उपयोग करते समय अतिरिक्त सावधानी बरतने की सलाह देता/देती हूँ क्योंकि यह क्रिया स्थायी होती है और इसमें कोई बिल्ट-इन पूर्ववत नहीं है। केवल तभी चलाएँ जब आप सुनिश्चित हों कि आपको किसी भी स्टैश किए गए काम की अब आवश्यकता नहीं है।
git stash branch: किसी स्टैश को ब्रांच में बदलें
यदि आपका वर्तमान ब्रांच उस समय से काफी अलग हो गया है जब आपने स्टैश बनाया था, तो उसे लागू करने से मर्ज कॉन्फ्लिक्ट्स हो सकते हैं। ऐसे में, आप सीधे स्टैश से एक नई ब्रांच बना सकते हैं:
git stash branch pipeline-fix stash@{1}

ऊपर दिया कमांड निम्न कार्य करता है:
- जहाँ स्टैश बनाया गया था, उस मूल कमिट से नई ब्रांच बनाता है
- स्टैश लागू करता है
- उसे स्टैश सूची से हटा देता है
ब्रांचेस को बेहतर विकास और सहयोग के लिए प्रबंधित करने के बारे में अधिक जानने हेतु, हमारा Git Branch ट्यूटोरियल देखें।
अन्य उपयोगी Git Stash कमांड्स
सामान्य वर्कफ़्लोज़ से आगे, नीचे कुछ उन्नत git stash कमांड दिए गए हैं जिनके बारे में आपको जानकारी होनी चाहिए:
-
git stash create: स्टैश सूची में जोड़े बिना एक स्टैश ऑब्जेक्ट बनाता है -
git stash store: create से बनाए गए स्टैश को स्टोर करता है -
git stash export: किसी रेफ़रेंस पर स्टैश एक्सपोर्ट करता है या उसे प्रिंट करता है -
git stash import: किसी मौजूदा कमिट से स्टैश इम्पोर्ट करता है
सामान्य त्रुटियाँ और उन्हें कैसे ठीक करें
भले ही git stash सीधी-सरल है, कुछ सामान्य मुद्दे बाधा बन सकते हैं। यहाँ कुछ त्रुटियाँ हैं जिनका मैंने सामना किया है और उन्हें जल्दी पहचानने और ठीक करने के तरीके।
No local changes to save
यह सबसे आम “ग़ैर-त्रुटि” त्रुटि है। यह तब होती है जब आप एक साफ़ वर्किंग डायरेक्टरी पर git stash चलाते हैं जहाँ कोई संशोधित या स्टेज्ड ट्रैक्ड फ़ाइलें नहीं होतीं।
इसे ठीक करने के लिए, git status चलाएँ, और यदि कुछ नहीं दिखता, तो स्टैश करने के लिए कुछ नहीं है।

स्टैश लागू करते समय संघर्ष
संघर्ष तब होते हैं जब जिस ब्रांच पर आप हैं, उसने उन्हीं कोड लाइनों में बदलाव किया हो जो आपके स्टैश में मौजूद हैं। उदाहरण के लिए, जब आप नई ब्रांच पर फ़ाइल संशोधित करने के बाद git stash pop चलाते हैं, तो संभवतः आपको एक त्रुटि संदेश मिलेगा:

इसके बाद आपको फ़ाइल के अंदर कॉन्फ्लिक्ट मार्कर्स दिख सकते हैं:

इसे ठीक करने के लिए, आप निम्न में से कोई भी कर सकते हैं:
- फ़ाइल में मैन्युअल रूप से संघर्ष सुलझाएँ
- सुलझाई गई फ़ाइलों को स्टेज करें
git add data_pipeline.py
- यदि संघर्ष पर स्टैश स्वतः नहीं हटता, तो
git stash dropका उपयोग करके स्टैश को मैन्युअल रूप से ड्रॉप करें
यदि संघर्ष बहुत उलझे हुए हों, तो नीचे दिया कमांड उपयोग करके बदलावों को एक साफ़ स्लेट पर लागू करें।
git stash branch recovery-branch stash@{0}
अनजाने में ऐसी फ़ाइलें स्टैश हो गईं जिन्हें आप नहीं चाहते थे
कभी-कभी आप अपने वर्किंग डायरेक्टरी को जाँचे बिना git stash चला सकते हैं, और बाद में एहसास होता है कि आपने वह फिक्स भी छिपा दिया जिसे वास्तव में कमिट करना था।
ऐसी गलतियों से बचने के लिए, हमेशा स्पष्ट रहें कि किन फ़ाइलों को स्टैश करना है। उदाहरण के लिए, नीचे दिया कमांड वर्किंग डायरेक्टरी की हर चीज़ के बजाय केवल data_pipeline.py फ़ाइल को स्टैश करेगा।
git stash push data_pipeline.py
आप git stash -p का उपयोग करके इंटरैक्टिव (पैच) मोड भी चला सकते हैं, जिससे आप फ़ाइलों के भीतर के बदलावों के हिस्सों को चयनात्मक रूप से स्टैश कर सकें, न कि पूरी फ़ाइलों को।
रोकथाम के तौर पर, स्टैश करने से पहले हमेशा git status जाँचें।
निष्कर्ष
सामान्य नियम के रूप में, स्टैशेस को अल्पकालिक रखें और हमेशा वर्णनात्मक संदेशों का उपयोग करें। यदि आप किसी काम पर एक दिन के भीतर वापस नहीं आएँगे, तो WIP ब्रांच बनाना अधिक सुरक्षित विकल्प है, क्योंकि उसे रिमोट पर पुश किया जा सकता है और वह खोएगी नहीं।
मजबूत Git कौशल विकसित करने के लिए, मैं हमारा Intermediate Git कोर्स लेने की सलाह देता/देती हूँ ताकि आप Git में सहयोग करना सीख सकें। साथ ही, हमारा Advanced Git कोर्स भी सुझाता/सुझाती हूँ, ताकि आप बड़े प्रोजेक्ट्स में Git के साथ काम करना सीखें और डेटा पाइपलाइन विकास में जटिल वर्ज़न कंट्रोल परिदृश्यों और समस्याओं को संभाल सकें।
डेटा एनालिटिक्स, बिज़नेस इंटेलिजेंस और डेटा साइंस में व्यावहारिक अनुभव रखने वाला डेटा साइंस तकनीकी लेखक। मैं SQL, Python, Power BI, Databricks और डेटा इंजीनियरिंग पर व्यावहारिक, उद्योग-केंद्रित सामग्री लिखता/लिखती हूँ, जो वास्तविक दुनिया की एनालिटिक्स कार्य से जुड़ी होती है। मेरी लेखनी तकनीकी गहराई और व्यावसायिक प्रभाव के बीच पुल का काम करती है, जिससे पेशेवरों को डेटा को आत्मविश्वासपूर्ण निर्णयों में बदलने में मदद मिलती है.
Git Stash FAQs
क्या git stash अनट्रैक्ड फ़ाइलें सहेजता है?
नहीं, डिफ़ॉल्ट रूप से, git stash केवल ट्रैक्ड फ़ाइलें सहेजता है। अनट्रैक्ड फ़ाइलों को शामिल करने के लिए git stash -u का उपयोग करें।
क्या git stash मेरी कमिट हिस्ट्री को प्रभावित करता है?
नहीं, स्टैशेस आपकी कमिट हिस्ट्री से अलग होते हैं और आपकी ब्रांच लॉग्स में दिखाई नहीं देते।
git stash pop और git stash apply में क्या अंतर है?
git stash pop स्टैश को लागू करता है और उसे हटा देता है, जबकि git stash apply स्टैश को लागू करता है लेकिन उसे स्टैश सूची में बनाए रखता है।
Git “No local changes to save” क्यों कहता है?
यह समस्या तब होती है जब आपकी वर्किंग डायरेक्टरी साफ़ होती है; स्टैश करने के लिए कोई संशोधित या स्टेज्ड ट्रैक्ड फ़ाइल नहीं होती।
स्टैश को पुनर्स्थापित करते समय संघर्ष किस कारण होते हैं?
संघर्ष तब होते हैं जब उन्हीं फ़ाइल हिस्सों में बदलाव आपके वर्तमान ब्रांच और स्टैश किए गए बदलावों दोनों में हुए हों।
