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

इस लेख में, मैं आपको git clone का उपयोग करना सिखाऊँगा, विशेष ब्रांच को क्लोन करने पर ध्यान देते हुए। अगर आप Git के बारे में और सीखना चाहते हैं, तो मैं यह Introduction to Git कोर्स सुझाता हूँ।
जो जल्दी में हैं, उनके लिए पहले एक छोटा सा उत्तर देखते हैं। उसके बाद हम विस्तार से समझेंगे।
संक्षिप्त उत्तर: किसी विशेष ब्रांच को कैसे क्लोन करें
किसी git रिपोजिटरी से विशेष ब्रांच क्लोन करने के लिए यह कमांड चलाएँ:
git clone --single-branch --branch <branch_name> <repository_url>
यहाँ <branch_name> को इच्छित ब्रांच के नाम से और <repository_url> को रिपोजिटरी के URL से बदलें। यह कमांड निर्दिष्ट ब्रांच की एक लोकल कॉपी बना देती है, ताकि आप उसी ब्रांच पर तुरंत और केंद्रित तरीके से काम कर सकें।
उदाहरण
पूरे लेख में हम इसी रिपोजिटरी का उपयोग करेंगे। आप इसे अपनी मशीन पर सीखी हुई कमांड्स आज़माने के लिए उपयोग कर सकते हैं। इस रिपोजिटरी में तीन ब्रांच हैं:
main: डिफ़ॉल्ट ब्रांच, जिसमें दो टेक्स्ट फाइलें हैं।add-new-file: वह ब्रांच जिसमें तीसरी फाइल जोड़ी गई है।modify-file: वह ब्रांच जिसमें दूसरी फाइल में बदलाव किया गया है।
इस तरह हम add-new-file ब्रांच को क्लोन कर सकते हैं:
git clone --single-branch --branch add-new-file https://github.com/fran-aubry/git-clone-example.git
git clone क्या है?
डिफ़ॉल्ट रूप से, git clone पूरी रिपोजिटरी को आपकी लोकल मशीन पर एक नई डायरेक्टरी में कॉपी करने के लिए बनाया गया है, जो सभी ब्रांचेस को क्लोन करता है। इसका सिंटैक्स यह है:
git clone <repository_url>
उदाहरण वाली रिपोजिटरी को क्लोन करने के लिए हम यह कर सकते हैं:
git clone https://github.com/fran-aubry/git-clone-example.git
इस कमांड के चलने के बाद, सभी ब्रांचेस आपकी लोकल मशीन पर कॉपी हो जाएँगी। हालाँकि, एक समय में केवल एक ही ब्रांच की फाइलें दिखाई देती हैं, जिसे checked-out ब्रांच कहा जाता है। रिपोजिटरी को क्लोन करने के बाद डिफ़ॉल्ट ब्रांच (आमतौर पर main या master) ही चेकआउट होती है।

ब्रांच बदलना
फुल क्लोन के बाद, हम git checkout कमांड का उपयोग करके इच्छित ब्रांच पर जा सकते हैं। उदाहरण के लिए, modify-file ब्रांच पर जाने के लिए हम यह चलाएँगे:
git checkout modify-file

क्लोनिंग डेप्थ
Git में काम करते समय, ब्रांच पर किए गए बदलावों को git commit कमांड से सेव किया जाता है। हर कमिट उस ब्रांच की एक नई स्टेट बनाता है, जिस पर ज़रूरत पड़ने पर आप वापस जा सकते हैं। हर कमिट को एक स्नैपशॉट समझें, और git उन सभी स्नैपशॉट्स का हिसाब रखता है। आप किसी भी समय किसी भी स्नैपशॉट पर ब्रांच को रिवर्ट कर सकते हैं।
जब बिना किसी विकल्प के git clone कमांड चलती है, तो यह आपकी लोकल मशीन पर हर ब्रांच के हर कमिट को डाउनलोड करती है। प्रोजेक्ट के आकार के हिसाब से, यह आपके लोकल स्टोरेज का काफ़ी हिस्सा ले सकता है। अगर आपको पूरा इतिहास नहीं चाहिए, तो आप --depth पैरामीटर का उपयोग करके यह निर्दिष्ट कर सकते हैं कि कितने कमिट्स (या स्नैपशॉट्स) क्लोन करने हैं।
केवल नवीनतम कमिट लोड करते हुए मुख्य ब्रांच को क्लोन करने के लिए यह कमांड उपयोग करें:
git clone --depth=1 https://github.com/fran-aubry/git-clone-example.git
किसी विशेष ब्रांच को क्लोन करना
हमने देखा कि git clone से रिपोजिटरी कैसे क्लोन करते हैं। डिफ़ॉल्ट रूप से यह कमांड सबकुछ आपकी लोकल मशीन पर क्लोन कर देती है। अक्सर, आपको सिर्फ़ किसी एक खास ब्रांच पर काम करना होता है, तो सिर्फ़ उसी ब्रांच को क्लोन करना ज़्यादा कुशल रहता है। इससे डिस्क स्पेस बचता है और क्लोन करने के बाद ब्रांच बदलने की ज़रूरत नहीं पड़ती—आप तुरंत काम शुरू कर सकते हैं।
किताब लिखने की उपमा में सोचें कि आपको किसी किताब के दूसरे अध्याय के पुनर्लेखन पर काम सौंपा गया है। इस स्थिति में आपको केवल उसी ब्रांच को क्लोन करना चाहिए जहाँ यह कार्य चल रहा है; अन्य अध्यायों के संशोधन वाली ब्रांचेस की ज़रूरत नहीं है।
आप git को केवल एक ब्रांच क्लोन करने के लिए --single-branch और --branch आर्ग्युमेंट्स के साथ ब्रांच का नाम देकर निर्देशित कर सकते हैं:
git clone --single-branch --branch <branch_name> <repository_url>
आईए कमांड को समझें:
git clone: यह बेसिक git कमांड है जो किसी रिमोट सोर्स से रिपोजिटरी को आपकी लोकल मशीन पर कॉपी करता है।
--single-branch: यह विकल्प Git को सिर्फ़ एक ही ब्रांच क्लोन करने के लिए कहता है। अगर ब्रांच निर्दिष्ट नहीं की गई, तो डिफ़ॉल्ट ब्रांच क्लोन होगी।
--branch <branch_name>: इससे क्लोन की जाने वाली ब्रांच तय होती है। <branch_name> वह ब्रांच है जिसे आप क्लोन करना चाहते हैं।<repository_url>: रिपोजिटरी का URL।
उदाहरण के लिए, हमारी रिपोजिटरी से केवल modify-file ब्रांच को क्लोन करने के लिए हम यह कर सकते हैं:
git clone --single-branch --branch add-new-file https://github.com/fran-aubry/git-clone-example.git
क्लोन की गई ब्रांच के साथ कैसे काम करें
किसी ब्रांच पर काम करते समय, आपको तीन बुनियादी काम करने होते हैं:
- वर्तमान स्थिति का स्नैपशॉट बनाकर अपने मौजूदा काम को सेव करना।
- अपने बदलाव अपलोड करना ताकि सभी लोग उन्हें एक्सेस कर सकें।
- दूसरों के बदलाव डाउनलोड करना और उन्हें अपने बदलावों के साथ मर्ज करना।
git commit के साथ अपने बदलाव सेव करना
Git में, अपने काम को सेव करना एक कमिट बनाना कहलाता है। यह प्रक्रिया उस ब्रांच की वर्तमान स्थिति का स्नैपशॉट लेती है जिस पर आप काम कर रहे हैं।
हर कमिट के बाद ब्रांच की स्थिति आपकी लोकल मशीन पर सेव हो जाती है, जिससे आप प्रगति के अलग-अलग चरणों के बीच नेविगेट कर सकते हैं।

Git में अपने बदलाव कमिट करने के लिए आप git commit कमांड का उपयोग करते हैं। हालाँकि, कमिट करने से पहले git को यह जानना होता है कि किन फाइलों को कमिट में शामिल करना है। आप git add कमांड से सेव की जाने वाली फाइलें बताते हैं। इसका सिंटैक्स इस प्रकार है:
git add <path_to_file>
यहाँ <path_to_file> उस फाइल का पथ है जिसे आप कमिट करना चाहते हैं। उदाहरण के लिए, अगर हम अपनी उदाहरण रिपोजिटरी की modify-file ब्रांच पर हैं और हमने file2.txt में एक पैरा जोड़ा है, तो आप यह कमांड चलाकर उस फाइल को ऐड करेंगे:
git add file2.txt
जिन फाइलों को आप कमिट में शामिल करना चाहते हैं उन्हें जोड़ने के बाद, आप यह कमांड चलाकर कमिट कर सकते हैं:
git commit -m <message>
यहाँ <message> एक संक्षिप्त संदेश है, जिसे डबल कोट्स में रखें, और जो बदलावों का संक्षेप में वर्णन करता हो। उदाहरण के लिए:
git commit -m "Add paragraph"
कमिट संदेश के लिए कुछ मानक प्रथाएँ इस प्रकार हैं। ये प्रोजेक्ट पर काम करने वाले सभी लोगों के बीच स्पष्टता और समझ सुनिश्चित करने के लिए महत्वपूर्ण हैं:
- आदेशात्मक स्वर (imperative mood) का उपयोग करें: अपने कमिट संदेश की शुरुआत क्रिया से करें (जैसे, "Add", "Fix", "Update"). उदाहरण के लिए, "Added new feature" की बजाय "Add new feature" लिखें।
- संक्षिप्त लेकिन वर्णनात्मक रहें: संदेश छोटा रखें, आदर्श रूप से 50 अक्षरों के अंदर। फिर भी, बदलावों का स्पष्ट वर्णन प्राथमिकता दें। "Changed stuff" की बजाय "Update styling for navigation bar" लिखें।
- सामान्य/अस्पष्ट संदेशों से बचें: जैसे "Fix bugs" या "Make improvements" जैसे धुंधले संदेशों से बचें। इसके बजाय, विशिष्ट हों: "Fix bug in login form validation" या "Improve readability of documentation"।
git push से अपने बदलाव अपलोड करना
कमिट करने पर, आप अपने बदलावों का स्नैपशॉट अपनी लोकल मशीन पर बनाते हैं। दूसरों को आपके बदलावों तक पहुँच देने के लिए आपको उन्हें अपलोड करना होगा। इसके लिए push कमांड का उपयोग करें।
Git में push कमांड का बेसिक सिंटैक्स यह है:
git push <remote> <branch>
इसे विभाजित करके समझते हैं:
<remote>: वह रिमोट रिपोजिटरी का नाम जहाँ आप अपने बदलाव पुश करना चाहते हैं। डिफ़ॉल्ट रूप से, जब आप रिपोजिटरी क्लोन करते हैं तो रिमोट का नाम origin होता है।<branch>: वह ब्रांच जिसका बदलाव आप रिमोट रिपोजिटरी पर पुश करना चाहते हैं। अगर आप यह आर्ग्युमेंट छोड़ देते हैं, तो Git वर्तमान ब्रांच और रिमोट ट्रैकिंग कॉन्फ़िगरेशन के आधार पर बदलावों को पुश करेगा।
git push के कुछ सामान्य उपयोग इस प्रकार हैं:
- वर्तमान ब्रांच से बदलाव पुश करना:
git push - किसी विशेष ब्रांच के बदलाव पुश करना:
git push origin <branch>
git pull से बदलाव डाउनलोड करना
Git बड़ी टीमों को एक ही प्रोजेक्ट पर एक साथ काम करने में सक्षम बनाता है। जब सहकर्मी उसी ब्रांच को एडिट करते हैं जिस पर आप काम कर रहे हैं, तो आपकी लोकल ब्रांच रिमोट ब्रांच की तुलना में पुरानी हो सकती है।
दूसरों के कमिट्स डाउनलोड करने के लिए हम git pull कमांड का उपयोग करते हैं। Git में pull कमांड का बेसिक सिंटैक्स है:
git pull <remote> <branch>
प्रत्येक पैरामीटर क्या करता है:
<remote>: वह रिमोट रिपोजिटरी जिससे आप पुल करना चाहते हैं। डिफ़ॉल्ट रूप से इसका नाम origin होता है।<branch>: वह ब्रांच जिससे आप बदलाव पुल करना चाहते हैं। अगर निर्दिष्ट नहीं है, तो git वर्तमान ब्रांच और उसकी अपस्ट्रीम ब्रांच का उपयोग करता है।
git pull के कुछ सामान्य उपयोग इस प्रकार हैं:
- वर्तमान ब्रांच से बदलाव पुल करना:
git pull - किसी विशेष ब्रांच से बदलाव पुल करना:
git pull origin <branch>
Commit-pull-push कार्यप्रवाह
Git का उपयोग करते समय, मैं सुझाव दूँगा कि आप अपनी लोकल ब्रांच को अपडेटेड रखने के लिए अक्सर pull करें। मैं निम्नलिखित सर्वोत्तम प्रथाओं का पालन करने की सलाह देता हूँ:
- काम शुरू करने से पहले, वर्तमान ब्रांच के लिए नवीनतम अपडेट pull करें ताकि आप सबसे ताज़ा संस्करण पर काम करें।
- अक्सर कमिट करें, यह सुनिश्चित करते हुए कि हर कमिट छोटे और तार्किक रूप से संबंधित बदलावों पर केंद्रित हो।
- कुछ बदलाव करने और कमिट बनाने के बाद, फिर से pull करें ताकि अगर किसी और ने भी साथ-साथ अपडेट किए हों तो आपकी ब्रांच अपडेट हो जाए।
- अंत में, अपने बदलाव रिमोट रिपोजिटरी पर push करें।

Git conflicts
जब आप रिमोट रिपोजिटरी से बदलाव डाउनलोड करने के लिए git pull कमांड चलाते हैं, तो संभव है कि किसी और कमिट ने उन्हीं पंक्तियों में बदलाव कर दिए हों जिनमें आपके लोकल कमिट्स ने किए हैं। Git ऑटोमैटिक रूप से बदलावों को मर्ज करने की कोशिश करता है, और कई मामलों में सफल होता है। उदाहरण के लिए, यदि एक ही फाइल के अलग-अलग हिस्सों में बदलाव हुए हैं, तो Git इन्हें आसानी से मर्ज कर सकता है क्योंकि कमिट्स अलग-अलग सेक्शंस को प्रभावित करते हैं।
लेकिन अगर आपने और किसी अन्य योगदानकर्ता ने एक ही पैराग्राफ़ को एडिट किया है, तो Git यह तय नहीं कर पाएगा कि किस संस्करण को रखा जाए, और मर्ज कॉन्फ्लिक्ट हो जाएगा। ऐसी स्थिति में, आपको तय करके कि कौन से बदलाव रखने हैं, कॉन्फ्लिक्ट को मैन्युअली सुलझाना होगा।
कॉन्फ्लिक्ट्स को हल करने पर और मार्गदर्शन के लिए, मैं यह लेख पढ़ने की सलाह देता हूँ: Git में मर्ज कॉन्फ्लिक्ट्स कैसे हल करें।
GitHub डाउनलोड
कुछ स्थितियों में, आप किसी रिपोजिटरी की लोकल कॉपी सिर्फ़ उपयोग के लिए चाहते हैं, उसे संशोधित करने का इरादा नहीं होता। अगर वह पब्लिक रिपोजिटरी है, तो आपको अपनी लोकल मशीन पर Git इंस्टॉल करने की ज़रूरत नहीं है। आप सीधे GitHub से रिपोजिटरी डाउनलोड कर सकते हैं: Code बटन पर क्लिक करें और फिर Download Zip बटन दबाएँ, जैसा नीचे दिखाया गया है:

निष्कर्ष
Git क्लोनिंग आपको किसी Git रिपोजिटरी को अपनी लोकल मशीन पर कॉपी करने देती है, ताकि आप कोड का उपयोग कर सकें या उसमें नई कार्यक्षमताएँ जोड़कर उसे आगे बढ़ा सकें। किसी रिपोजिटरी को क्लोन करने पर सभी ब्रांचेस डाउनलोड होती हैं, जो डिस्क स्पेस का काफ़ी उपयोग कर सकती हैं।
ब्रांचेस का उपयोग विशिष्ट बदलावों या फ़ीचर्स पर काम करने के लिए किया जाता है। किसी खास ब्रांच को क्लोन करने से आप उन्हीं बदलावों में योगदान दे सकते हैं, असंबंधित काम डाउनलोड किए बिना—इससे बहुत कम डिस्क स्पेस लगता है और आपकी लोकल डिस्क साफ़ रहती है।
अगर आप इस विषय के बारे में और सीखना चाहते हैं, तो यह GitHub और Git: शुरुआती लोगों के लिए ट्यूटोरियल देखें।
