मुख्य सामग्री पर जाएँ

Git Rebase: सुव्यवस्थित वर्ज़न कंट्रोल के लिए शुरुआती मार्गदर्शिका

जानें कि Git rebase का उपयोग करके अपने कमिट इतिहास को साफ़ रखें और सहयोग में सुधार करें। यह गाइड चरण-दर-चरण निर्देश, सर्वोत्तम प्रथाएँ, और Git में ब्रांच को रिबेस करते समय होने वाली आम गलतियों से बचने के तरीके कवर करता है।
· 8 मि॰ पढ़ें

AI के साथ खोजें

वर्ज़न कंट्रोल आधुनिक सॉफ्टवेयर विकास के सबसे महत्वपूर्ण पहलुओं में से एक है। यह आपको बदलावों को ट्रैक करने, कुशलतापूर्वक सहयोग करने, और कोड का इतिहास बनाए रखने में मदद करता है। उपलब्ध विभिन्न टूल्स में, Git कोड परिवर्तनों को प्रबंधित करने के लिए सबसे व्यापक रूप से इस्तेमाल किए जाने वाले सिस्टमों में से एक है।

जैसा कि आप हमारे Introduction to Git कोर्स से जानेंगे, Git मुख्य कोडबेस को प्रभावित किए बिना विभिन्न फीचर्स या फिक्स पर काम करने के लिए ब्रांचिंग प्रदान करता है। जबकि ब्रांचिंग विकास को अधिक लचीला बनाती है, ब्रांचों को व्यवस्थित रखना कभी-कभी चुनौतीपूर्ण हो सकता है। यहीं पर Git rebase काम आता है।

Git ब्रांचों को समझना

जैसा कि हम अपने Git और GitHub गाइड में देखते हैं, ब्रांच आपको मुख्य कोडबेस से स्वतंत्र रूप से नए फीचर्स या बग फिक्स पर काम करने देती हैं। वे एक अलग वातावरण प्रदान करती हैं जहाँ बदलाव किए जा सकते हैं, बिना अन्य ब्रांचों में चल रहे काम को बाधित किए।

कई सामान्य ब्रांचिंग वर्कफ़्लो होते हैं, जिनमें शामिल हैं:

  • फ़ीचर ब्रांच: इन्हें नई कार्यक्षमता विकसित करने के लिए उपयोग किया जाता है, जिन्हें बाद में मुख्य ब्रांच में मर्ज किया जाता है।
  • रिलीज़ ब्रांच: नई रिलीज़ से पहले कोड को स्थिर करने के लिए।
  • हॉटफिक्स ब्रांच: गंभीर समस्याओं को ठीक करने के लिए बनाई जाती हैं।

इन ब्रांचों का प्रभावी प्रबंधन एक साफ़ और व्यवस्थित कोड इतिहास बनाए रखने के लिए महत्वपूर्ण है।

Understanding Git branches

Git Rebase क्या है?

Git rebase एक कमांड है जो आपको एक ब्रांच के कमिट्स को दूसरी ब्रांच पर ले जाने या फिर से लागू करने देता है। मर्जिंग के विपरीत, जो विभिन्न ब्रांचों के बदलावों को मिलाकर एक नया कमिट बनाता है, रिबेस लक्ष्य ब्रांच पर बदलावों को एक-एक करके लागू करता है। इससे अनावश्यक मर्ज कमिट्स के बिना एक रैखिक (linear) इतिहास बनता है।

रिबेस करते समय, Git स्रोत ब्रांच के प्रत्येक कमिट को लेता है और उन्हें लक्ष्य ब्रांच के नवीनतम कमिट के ऊपर लागू करता है। इससे कमिट इतिहास पढ़ना और फॉलो करना आसान हो जाता है। किसी रिपॉजिटरी का पूरा कमिट इतिहास कैसे देखें, इस पर हम अपने Git Diff गाइड में और बात करते हैं। 

What is Git rebase?

Git Rebase का उपयोग क्यों करें?

रिबेस कई कारणों से उपयोगी है:

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

हालाँकि, रिबेस जोखिमपूर्ण हो सकता है, खासकर साझा ब्रांचों पर काम करते समय, क्योंकि यह कमिट इतिहास को फिर से लिखता है और संघर्ष (conflicts) पैदा कर सकता है या बदलावों को ट्रैक करना कठिन बना सकता है। सार्वजनिक ब्रांचों को रिबेस करने से बचना सबसे अच्छा है और सहयोगात्मक वर्कफ़्लो में इसे सावधानी से उपयोग करें।

Git Rebase कब उपयोग करें

कुछ परिस्थितियाँ हैं जहाँ Git rebase का उपयोग सही विकल्प होता है। हमने प्रत्येक को नीचे विस्तार से समझाया है: 

लोकल फ़ीचर ब्रांच को रिबेस करना

किसी फ़ीचर ब्रांच पर काम करते समय, इसे मुख्य ब्रांच के नवीनतम बदलावों से अपडेट करना आम बात है। रिबेस, जो फ़ीचर ब्रांच के कमिट्स को सबसे हाल के मुख्य ब्रांच के ऊपर रखता है, मर्ज के विकल्प के रूप में एक साफ़ कमिट इतिहास बनाए रखने में मदद करता है।

फ़ीचर ब्रांचों को अद्यतन रखना

जब कई डेवलपर एक ही रिपॉजिटरी पर काम कर रहे होते हैं, तो मुख्य ब्रांच अक्सर बदलती रहती है। रिबेस अनावश्यक मर्ज कमिट्स जोड़े बिना फ़ीचर ब्रांच को अपडेट रखने में मदद करता है।

टीम सहयोग में रिबेस करना

टीम में काम करते समय, रिबेस संभावित संघर्षों को पहले से रोकने में मदद कर सकता है। फ़ीचर ब्रांच को नियमित रूप से मुख्य ब्रांच पर रिबेस करके, आप बदलावों को क्रमिक रूप से एकीकृत कर सकते हैं, जिससे बाद में मर्ज कॉन्फ्लिक्ट्स का जोखिम कम होता है।

Git Rebase के लिए चरण-दर-चरण मार्गदर्शिका

इस सेक्शन में, हम आपको Git के साथ रिबेस करने की प्रक्रिया से गुज़ारेंगे, और हर ज़रूरी चरण की मार्गदर्शिका देंगे।

Step-by-step guide to Git rebase

रिबेस की तैयारी

रिबेस शुरू करने से पहले, सुनिश्चित करें कि वर्किंग डायरेक्टरी साफ़ है। इसका मतलब है कि रिबेस करने से पहले किसी भी बदलाव को कमिट या स्टैश कर लें। 

Git Rebase with Unstage Changes

साथ ही, यह जाँचें कि आप सही ब्रांच पर हैं, इसके लिए चलाएँ:

git branch

नवीनतम बदलाव लाना

रिबेस से पहले, सुनिश्चित करें कि लोकल रिपॉजिटरी में रिमोट रिपॉजिटरी से नवीनतम बदलाव आ गए हैं:

git fetch origin

फ़ीचर ब्रांच पर स्विच करना

उस फ़ीचर ब्रांच पर जाएँ जिसे रिबेस करना है:

git checkout your-feature-branch

मुख्य ब्रांच पर रिबेस करना

फ़ीचर ब्रांच के कमिट्स को नवीनतम मुख्य ब्रांच के ऊपर लगाने के लिए चलाएँ:

git rebase main

Git फ़ीचर ब्रांच के प्रत्येक कमिट को अपडेटेड मुख्य ब्रांच पर पुनः लागू करेगा।

Applying Git Rebase Successfully

जब आप git rebase main चलाते हैं, तो Git मुख्य ब्रांच के बदलावों को आपके फ़ीचर ब्रांच के कमिट्स से पहले लागू करता है। इससे आपका इतिहास साफ़ और रैखिक बना रहता है। यह प्रक्रिया आपके कमिट्स को main की नवीनतम स्थिति पर फिर से चलाती है, जिसके परिणामस्वरूप मर्ज कमिट्स के बिना रैखिक प्रोजेक्ट इतिहास बनता है।

उदाहरण के लिए, मान लें कि मुख्य ब्रांच में कमिट A और B हैं। आपकी फ़ीचर ब्रांच A से अलग हो गई और उसमें कमिट C और D शामिल हैं। 

A---B  (main)
 \
  C---D  (feature)

git rebase main के बाद,  आपकी फ़ीचर ब्रांच में main के कमिट्स के बाद आपके कमिट्स शामिल होंगे:

---B---C'---D'  (feature)

यहाँ C और D आपके मूल बदलावों का प्रतिनिधित्व करने वाले नए कमिट हैं, जो अब B के ऊपर आधारित हैं।

संघर्ष सुलझाना (यदि हों)

यदि रिबेस के दौरान कॉन्फ्लिक्ट्स आते हैं, तो Git रुक जाएगा और आपको उन्हें सुलझाने देगा। 

कॉन्फ्लिक्ट्स को ठीक करने के बाद उन्हें resolved चिह्नित करें:

git add .
git rebase --continue

आवश्यक होने पर, आप रिबेस रद्द कर सकते हैं:

git rebase --abort

रिबेस पूरा करना

सफल रिबेस के बाद, ब्रांच की जाँच करें और कोड का परीक्षण करें ताकि सुनिश्चित हो कि सब कुछ सही तरह से काम कर रहा है।

Git में इंटरैक्टिव रिबेसिंग

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

इंटरैक्टिव रिबेस क्या है?

इंटरैक्टिव रिबेस git rebase -i आपको कमिट्स को लागू करने से पहले संशोधित करने देता है। इस मोड में रीऑर्डर, एडिट, स्क्वैश और कमिट हटाने जैसे विकल्प मिलते हैं।

इंटरैक्टिव रिबेसिंग क्यों उपयोग करें?

इंटरैक्टिव रिबेसिंग कमिट इतिहास को परिष्कृत करते समय उपयोगी है। यह कई कमिट्स को जोड़ने, कमिट संदेशों को संपादित करने, और मुख्य ब्रांच में मर्ज करने से पहले अनावश्यक कमिट्स को हटाने में मदद करता है।

इंटरैक्टिव रिबेस के सामान्य उपयोग

  • कमिट्स का क्रम बदलना। इतिहास को अधिक स्पष्ट बनाने के लिए कमिट्स के क्रम को बदलें।
  • एकाधिक कमिट्स को स्क्वैश करना। कई छोटे कमिट्स को एक अर्थपूर्ण कमिट में संयोजित करें।
  • कमिट संदेश संपादित करना। पुश करने से पहले कमिट संदेशों को संशोधित करें। यह महत्वपूर्ण है कि उपयुक्त कमिट संदेश लिखे जाएँ ताकि कोड में क्या अपडेट हुआ है यह स्पष्ट रहे, जैसा कि हम अपने GIT Push and Pull ट्यूटोरियल में दिखाते हैं। 

इंटरैक्टिव रिबेस कैसे करें

इंटरैक्टिव रिबेस शुरू करने के लिए चलाएँ:

git rebase -i HEAD~n

n को उन कमिट्स की संख्या से बदलें जिन्हें आप संशोधित करना चाहते हैं। इंटरैक्टिव इंटरफ़ेस आपको प्रत्येक कमिट को कैसे हैंडल करना है, यह चुनने देता है।

सर्वोत्तम प्रथाएँ और विचार

रिबेस करते समय, कुछ सर्वोत्तम प्रथाओं का पालन करना महत्वपूर्ण है। आइए इस सेक्शन में उनमें से कुछ पर बात करें। 

साझा ब्रांचों को रिबेस करने से बचें

जिस ब्रांच पर दूसरे लोग काम कर रहे हों, उसे रिबेस करना कॉन्फ्लिक्ट्स और भ्रम पैदा कर सकता है। यदि कोई साझा ब्रांच पहले ही पुश की जा चुकी है, तो उसे रिबेस करने से बचें।

नियमित रूप से फ़ेच और रिबेस करें

फ़ीचर ब्रांच को मुख्य ब्रांच के नवीनतम बदलावों से अद्यतन रखना कॉन्फ्लिक्ट्स को रोकने में मदद करता है और मर्जिंग को सुगम बनाता है।

रिबेस से पहले बैकअप लें

क्योंकि रिबेस कमिट इतिहास को संशोधित करता है, शुरू करने से पहले बैकअप बनाना अच्छा अभ्यास है। git stash का उपयोग करना या अस्थायी ब्रांच बनाना आकस्मिक डेटा हानि से बचा सकता है।

आम गलतियाँ और उनसे कैसे बचें

रिबेस करते समय आने वाली कुछ आम चुनौतियों और उनसे बचने के तरीके देखते हैं। 

अनजाने में सार्वजनिक ब्रांच को रिबेस करना

पहले से साझा की गई ब्रांच को रिबेस करना अन्य योगदानकर्ताओं के लिए कॉन्फ्लिक्ट्स पैदा कर सकता है। यदि ऐसा हो जाए, तो खोए हुए कमिट्स को रिकवर करने के लिए git reflog का उपयोग करें।

कॉन्फ्लिक्ट्स सुलझाने में कठिनाई

जब कॉन्फ्लिक्ट्स हों, तो उन्हें सावधानी से सुलझाने के लिए समय लें। git mergetool जैसे टूल्स प्रक्रिया को आसान बना सकते हैं।

कमिट इतिहास खो जाना

यदि रिबेस के बाद कमिट्स गायब हो जाएँ, तो उन्हें ढूँढने और बहाल करने के लिए git reflog का उपयोग करें।

निष्कर्ष

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

इन तकनीकों को लागू करें ताकि आपकी रिपॉजिटरी व्यवस्थित रहे और वर्कफ़्लो कुशल बनें। अपनी Git विशेषज्ञता को गहरा करना चाहते हैं? हमारा Intermediate Git कोर्स देखें और अपने सॉफ्टवेयर व डेटा प्रोजेक्ट्स में वर्ज़न कंट्रोल के लिए Git की बुनियादी बातें जानें।

Git Rebase FAQs

Git rebase और Git merge में क्या अंतर है?

Git merge दो ब्रांचों के बदलावों को मिलाकर एक नया कमिट बनाता है और दोनों के इतिहास को जस का तस रखता है। दूसरी ओर, Git rebase एक ब्रांच के कमिट्स को दूसरी पर क्रमवार लगाता है, जिससे अतिरिक्त मर्ज कमिट्स के बिना रैखिक कमिट इतिहास बनता है।

मुझे Git merge के बजाय Git rebase कब उपयोग करना चाहिए?

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

यदि Git rebase के दौरान मुझे कॉन्फ्लिक्ट्स मिलें तो क्या होता है?

यदि रिबेस के दौरान कॉन्फ्लिक्ट होता है, तो Git रुककर आपको उन्हें सुलझाने का संकेत देगा। आपको विवादित फ़ाइलों को मैन्युअल रूप से ठीक करना होगा, उन्हें git add . से स्टेज करना होगा, और फिर git rebase --continue के साथ रिबेस जारी रखना होगा। यदि कॉन्फ्लिक्ट बहुत जटिल हों, तो आप git rebase --abort के साथ रिबेस रद्द करके फिर से शुरू कर सकते हैं।

क्या किसी ऐसी ब्रांच को रिबेस करना सुरक्षित है जिसे पहले ही रिमोट रिपॉजिटरी पर पुश किया जा चुका है?

नहीं, ऐसी ब्रांच को रिबेस करना जिसे पुश किया जा चुका है और दूसरों के साथ साझा किया गया है, समस्याएँ पैदा कर सकता है क्योंकि यह कमिट इतिहास को फिर से लिखता है। यदि आपको साझा ब्रांच को रिबेस करना ही पड़े, तो अपनी टीम से संवाद करें और किसी और के बदलावों को ओवरराइट करने से बचने के लिए git push --force-with-lease का सावधानीपूर्वक उपयोग करें।

यदि Git rebase के दौरान कुछ गलत हो जाए तो मैं उसे कैसे पूर्ववत कर सकता/सकती हूँ?

यदि आपको लगे कि रिबेस से समस्याएँ हो गई हैं, तो आप git reflog का उपयोग करके रिबेस से पहले वाले कमिट को ढूँढ सकते हैं और git reset --hard <commit-hash> का उपयोग करके उसे बहाल कर सकते हैं। एक और विकल्प है git rebase --abort, यदि रिबेस अभी चल रहा हो और अभी पूरा न हुआ हो।

विषय