Git में शाखाएँ


आप weather-app बनाने के बीच में हैं, और आप एक पाँच दिन का पूर्वानुमान सुविधा जोड़ने का प्रयास करना चाहते हैं। इसे सही करने में कई commits लग सकते हैं, और जब तक यह तैयार नहीं हो जाता, आप अधूरा कोड उस ऐप के बगल में नहीं रखना चाहते जो पहले से सभी के लिए काम कर रहा है। एक शाखा (branch) यही है कि Git यह कैसे हल करता है: काम की एक अलग लाइन जहाँ प्रयोग रहता है, जबकि main बिल्कुल वैसे ही काम करता रहता है जैसे आपने शुरू करने से पहले किया था।
एक शाखा वास्तव में क्या है
यहाँ यह क्रिया में है:
$ git branch forecast
$ git switch forecast
Switched to branch 'forecast'दो commands: पहली एक नई शाखा forecast बनाती है, दूसरी आपको इस पर ले जाती है। यहाँ से, हर commit जो आप करते हैं वह forecast पर आता है जबकि main बिल्कुल वहाँ रहता है जहाँ यह है।
एक branch एक movable label है जो एक commit की ओर इशारा करता है। अभी, main और forecast दोनों उसी commit की ओर इशारा करते हैं, जिस पर आप git branch forecast चलाते समय खड़े थे। जैसे ही आप forecast पर फिर से commit करते हैं, वह label नए commit की ओर आगे बढ़ता है। main बिल्कुल वहाँ रहता है जहाँ यह था जब तक आप इस पर स्विच नहीं करते और खुद को वहाँ commit नहीं करते।
आप दोनों labels को git branch के साथ देख सकते हैं:
$ git branch
forecast
* mainतारांकन चिन्ह उस शाखा को चिह्नित करता है जिस पर आप वर्तमान में हैं। एक शाखा केवल एक नाम है जो एक commit की ओर इशारा करता है। यह पूरी व्यवस्था है। इस अध्याय में बाकी सब कुछ इन labels को चारों ओर घुमाने की भिन्नताएँ हैं।
git branch forecast आपके वर्तमान commit पर pointing एक नया label बनाता है, और git switch forecast आपको इस पर ले जाता है। आपकी files के बारे में कुछ नहीं बदलता जब तक आप वास्तव में वहाँ commit नहीं करते। मुझे branches को एक commit पर sticky notes के रूप में सोचना पसंद है: जोड़ने में सस्ता, घुमाने में सस्ता, हटाने में सस्ता जब आप कर लें। Branches बनाना और स्विच करना
git branch forecast अपने आप एक label बनाता है बिना आपको वहाँ ले जाए। अधिकतर समय आप दोनों एक साथ चाहते हैं, इसलिए git switch के पास एक shortcut है:
$ git switch -c forecast
Switched to a new branch 'forecast'-c का अर्थ है "create"। git switch -c दोनों एक शाखा बनाता है और आपको इस पर ले जाता है। वह एकल command है जो आप लगभग हर बार नया काम शुरू करते हैं।
Branches को स्विच करने से आपकी files कौन सा snapshot दिखाते हैं यह बदल जाता है। इसे try करें: नीचे echo लाइन एक एक-कदमीय तरीका है एक नई फ़ाइल बनाने का, src/forecast.js, इसमें एक लाइन के साथ, और बाकी सब कुछ commands हैं जो आप पहले से जानते हैं:
$ git switch forecast
$ echo "# पाँच-दिन पूर्वानुमान logic" > src/forecast.js
$ git add src/forecast.js
$ git commit -m "Start forecast module"
$ ls src
forecast.js index.js
$ git switch main
Switched to branch 'main'
$ ls src
index.jsफ़ाइल गायब नहीं हुई है। यह forecast शाखा पर रहती है, और main शाखा के snapshot में कभी इसे शामिल नहीं किया गया। forecast पर वापस स्विच करें और यह ठीक वैसे ही फिर से दिखाई दे जाएगी जैसे आपने इसे छोड़ा था।
git switch -c forecast एक शाखा बनाता है और आपको एक कदम में इस पर ले जाता है, जो आप लगभग हर बार उपयोग करेंगे। Branches को स्विच करने से आपकी files का कौन सा version आप देखते हैं यह बदल जाता है, इसलिए एक branch पर जोड़ी गई एक फ़ाइल दूसरे पर अनुपस्थित है जब तक आप वापस स्विच नहीं करते। कुछ भी खो नहीं जाता है, यह दूसरी शाखा पर parked है। HEAD और detached HEAD
Git आपको track करता है कि आप वर्तमान में कहाँ हैं एक marker के साथ जिसे HEAD कहा जाता है। आम तौर पर HEAD आपकी वर्तमान शाखा की ओर इशारा करता है, और वह शाखा एक commit की ओर इशारा करती है, इसलिए HEAD हर बार जब आप switch या commit करते हैं तब स्वचालित रूप से आगे बढ़ता है। अगर आप एक विशिष्ट commit को इसके hash द्वारा check out करते हैं, या एक tag (एक निश्चित label एक commit पर pinned, अक्सर एक release को चिह्नित करता है), एक शाखा name के बजाय, HEAD उस एक commit के लिए सीधे attach करता है बजाय एक branch label के। इस state को detached HEAD कहा जाता है।
आप वहाँ स्वतंत्र रूप से देख सकते हैं, और आप commit भी कर सकते हैं, लेकिन कुछ भी उन नए commits की ओर नाम से इशारा नहीं करता। अगर आप एक branch के लिए स्विच करते हैं पहले एक बनाए बिना, वे फिर से खोजना कठिन हो जाते हैं।
$ git switch a1b2c3d
HEAD is now at a1b2c3d Add password strength meterवह message, "HEAD is now at", Git आपको बता रहा है कि आप branch territory छोड़ गए हैं और HEAD को एक single commit से attach किया है।
यह कहाँ जाता है
आपने अब branches बनाए हैं, उनके बीच moved किया है, और देखा है कि main कैसे untouched रहता है जब आप कहीं और experiment करते हैं। अगला सवाल यह है कि एक branch पर काम main में कैसे वापस आता है, जो ठीक वही है जो Merging and conflicts cover करता है। अगर आप move करने से पहले commit history reading पर एक refresher चाहते हैं, History git log, git show, और git diff के माध्यम से चलता है।

