Git आपको अपने स्थानीय मशीन पर फ़ाइलों को खींचने से रोकता है यदि कोई अनसेव्ड या अनट्रैक्ड परिवर्तन मर्ज ऑपरेशन द्वारा ओवरराइट हो जाएंगे। आप फोर्स पुल मेथड का उपयोग करके Git को उन परिवर्तनों को खींचने के लिए मजबूर कर सकते हैं जिन्हें आप अपने स्थानीय कंप्यूटर पर प्राप्त करना चाहते हैं।
इस गाइड में, हम एक उदाहरण के संदर्भ में चर्चा करते हैं कि Git रिपॉजिटरी की सामग्री को फोर्स पुल कैसे करें। हम git pull और fetch कमांड के बारे में बात करेंगे, और फोर्स पुल के लिए reset विकल्प का उपयोग कैसे करें।
पुलिंग (Pulling) क्या है?
Git पुल ऑपरेशन एक रिमोट रिपॉजिटरी से सभी मेटाडेटा और फ़ाइलों को डाउनलोड करता है और प्राप्त डेटा के आधार पर स्थानीय रिपॉजिटरी को अपडेट करता है।
पुलिंग आपके स्थानीय फ़ाइलों को रिपॉजिटरी के रिमोट संस्करण के अनुरूप लाने की विधि है। यदि आप किसी रिमोट रिपॉजिटरी में किसी और द्वारा किए गए परिवर्तनों को डाउनलोड करना चाहते हैं तो आपको रिपॉजिटरी को पुल करना होगा। पुलिंग स्वचालित रूप से नहीं होती।
पुलिंग तब नहीं हो सकती जब आपके पास अनट्रैक्ड फ़ाइलें हों जिन्हें ओवरराइट किया जाएगा। इसका मतलब है कि आपके स्थानीय ब्रांच पर एक फ़ाइल है जिसे Git रिपॉजिटरी में नहीं जोड़ा गया है और यदि पुल हुआ तो उसे बदल दिया जाएगा।
आप रिपॉजिटरी को पुल नहीं कर सकते यदि आपके स्थानीय मशीन पर अनसेव्ड परिवर्तन हैं जो पुल द्वारा ओवरराइट हो जाएंगे।
Git: फोर्स पुल
हम ck-git नामक एक रिपॉजिटरी पर काम कर रहे हैं, जिसमें एक वेब प्रोजेक्ट का कोड है। एक सहयोगी ने अभी README.md नामक फ़ाइल को अपडेट किया है। हमने अपनी मशीन पर उस फ़ाइल को अपडेट किया है और अपने परिवर्तनों को रिपॉजिटरी में पुश नहीं किया है।
आइए देखते हैं कि जब हम अपने परिवर्तनों को पुल करने का प्रयास करते हैं तो क्या होता है:
git pull
यह कमांड एक त्रुटि लौटाती है:
error: Your local changes to the following files would be overwritten by merge: README.md Please, commit your changes or stash them before you can merge.
हमारे पास तीन विकल्प हैं। हम अपने परिवर्तनों को कमिट कर सकते हैं, उन्हें स्टैश कर सकते हैं, या Git को वैसे भी परिवर्तनों को खींचने के लिए मजबूर कर सकते हैं। ये हमारी फ़ाइलों को ओवरराइट कर देंगे।
हम git fetch कमांड का उपयोग करके किए गए किसी भी परिवर्तन को लाकर और फिर अपने रिपॉजिटरी को उन परिवर्तनों को दिखाने के लिए रीसेट करके Git को परिवर्तनों को खींचने के लिए मजबूर कर सकते हैं। आइए git fetch कमांड का उपयोग करके परिवर्तनों को लाकर शुरू करें:
git fetch --all
यह कमांड हमारे रिमोट रिपॉजिटरी में किए गए परिवर्तनों के लिए सभी मेटाडेटा को पुनर्प्राप्त करता है। अगला, हम अपनी वर्तमान ब्रांच का बैकअप लेने जा रहे हैं। हम यह सुनिश्चित करने के लिए ऐसा करते हैं कि हमारा काम न खो जाए जब हमारा कोड ओवरराइट हो जाए।
हम git branch कमांड का उपयोग करके अपनी ब्रांच का बैकअप ले सकते हैं:
git branch backup
यह कमांड "backup" नामक एक नई ब्रांच बनाता है। अब जब हमारी बैकअप ब्रांच मौजूद है, तो हम अपने रिपॉजिटरी को अपने रिमोट रिपॉजिटरी की सामग्री दिखाने के लिए रीसेट कर सकते हैं।
हम अपने रिपॉजिटरी को अपडेट करने के लिए git reset कमांड का उपयोग करने जा रहे हैं:
git reset --hard origin/master
--hard विकल्प रिमोट रिपॉजिटरी से सभी फ़ाइलों को डाउनलोड करता है और उन्हें आपके प्रोजेक्ट की स्थानीय वर्किंग कॉपी में जोड़ता है। यह आपके द्वारा किए गए किसी भी परिवर्तन को ओवरराइट कर देगा।
origin/master कथन उस ब्रांच को संदर्भित करता है जिसे हम पुनर्प्राप्त कर रहे हैं। हम अपने "origin" रिमोट रिपॉजिटरी से "master" ब्रांच की सामग्री डाउनलोड कर रहे हैं।
यदि आप किसी भिन्न ब्रांच या रिमोट नाम वाले रिपॉजिटरी के साथ काम कर रहे हैं, तो आप इस सूत्र का उपयोग करके मार्गदर्शन कर सकते हैं कि रीसेट कमांड का उपयोग कैसे करें:
git reset --hard <remote>/<branch>
git reset कमांड हमारे रिपॉजिटरी को हमारे द्वारा लाए गए सबसे हालिया कमिट पर रीसेट करता है।
अनकमिटेड परिवर्तनों को सहेजना
आप git stash कमांड का उपयोग करके अपने द्वारा किए गए अनकमिटेड परिवर्तनों को सहेज सकते हैं। यह कमांड आपको अपने कोड को बाद के लिए "स्टैश" करने देता है। आइए अपने कोड का एक स्टैश बनाएं:
git stash
हमारे रिपॉजिटरी में किए गए सभी परिवर्तन स्टैश में सहेजे जाएंगे। जब हम उन परिवर्तनों के साथ फिर से काम करने के लिए तैयार हों, तो हम अपने स्टैश को "पॉप" कर सकते हैं:
git stash pop
आप हमारे git stash ट्यूटोरियल में git stash के साथ सहेजने के बारे में अधिक पढ़ सकते हैं।
निष्कर्ष
आप Git रिपॉजिटरी को रिमोट रिपॉजिटरी से सामग्री खींचने के लिए मजबूर कर सकते हैं। ऐसा करने के लिए, आपको रिपॉजिटरी की सामग्री को लाने की आवश्यकता है। एक बार जब आप रिपॉजिटरी को ला लेते हैं, तो आप अपने परिवर्तनों को अपने रिमोट रिपॉजिटरी पर उस ब्रांच पर रीसेट कर सकते हैं जिसे आप अपने कोडबेस को उपयोग करना चाहते हैं।
अब आपके पास Git पुल ऑपरेशन को प्रो की तरह फोर्स करने का ज्ञान है!