TATECHATLAS
◎ हिन्दी
प्रोग्रामिंग

Git merge या rebase: ब्रांच साझा करने के तरीके के अनुसार चुनें

साझा इतिहास सुरक्षित रखें या बदलावों को जोड़ने से पहले स्थानीय कमिट नए आधार पर लागू करें।

इस पृष्ठ पर

Merge अलग इतिहासों को जोड़ता है; वह fast-forward कर सकता है या merge कमिट बना सकता है। Rebase कमिट को नए आधार पर दोबारा लागू करता है, जिससे उनकी पहचान बदल जाती है। दूसरे लोग जिस ब्रांच का उपयोग कर रहे हैं, उसका इतिहास बदलने से पहले उनसे समन्वय करें।

पहले इतिहास की तस्वीर समझें

आप feature में दो commits बनाते हैं और इसी दौरान main आगे बढ़ती है। Merge दोनों विकास क्रम मिलाता है और मौजूदा commits नहीं बदलता। इतिहास अलग हुआ हो तो सामान्यतः merge commit बनता है; अलग क्रम न हों तो branch pointer fast-forward हो सकता है।

Rebase आपके बदलाव नई base पर फिर लागू करता है। पूर्वज बदलने से commit IDs बदलते हैं। इतिहास सरल दिख सकता है, लेकिन पुराने commits रखने वाले सहयोगियों का इतिहास अलग हो जाता है। ब्रांच का साझा उपयोग और repository policy देखकर चुनें।

ब्रांच तैयार करें और नई जानकारी लें

git status से शुरू करें। अधूरे बदलाव पूरे करें या सुरक्षित रखें। फिर remote की स्थिति fetch करें। git fetch origin, origin/main अपडेट करता है; स्थानीय main अपने आप नहीं बदलती। यह अंतर समझने से पुरानी स्थानीय base के साथ अनजाने में integration नहीं होगा।

उदाहरण में remote का नाम origin और ब्रांच feature है। Backup branch बनाना integration से पहले के commits की reference बचाता है। नाम पहले से हो तो नया चुनें। उसके बाद origin/main पर उपयुक्त merge या rebase करें; बिना कारण दोनों क्रम से न चलाएँ।

git status
git fetch origin
git switch feature
git branch backup-feature

ब्रांच का इतिहास सुरक्षित रखने के लिए merge करें

जब मौजूदा कमिट की पहचान स्थिर रखनी हो तो merge एक सीधा तरीका है। Merge पूरा करने से पहले ब्रांच देखें और टकराव सुलझाने में किए गए बदलावों की समीक्षा करें।

git switch feature
git merge origin/main

स्थानीय काम सोच-समझकर rebase करें

Rebase स्थानीय फीचर ब्रांच का इतिहास सीधा कर सकता है। टकराव सावधानी से सुलझाएँ, बने हुए diff की समीक्षा करें और संबंधित जाँच दोबारा करें। कार्रवाई गलत हो तो आगे बढ़ने से पहले उसी कार्रवाई का abort कमांड इस्तेमाल करें।

git switch feature
git rebase origin/main

Conflict का अर्थ हल करें

Conflict में दो अलग business rules हो सकते हैं। दोनों बदलाव और आसपास का कोड पढ़ें। केवल markers हटाने से सही व्यवहार तय नहीं होता। हर सुधरी फ़ाइल git add से stage करें और staged diff देखें।

अधूरा merge, git merge --continue से पूरा या git merge --abort से रद्द करें। Rebase के लिए git rebase --continue या git rebase --abort लें। Rebase commits एक-एक करके लागू करता है, इसलिए बाद में फिर रुक सकता है। गलती हटाने के लिए --skip न करें; उससे उस commit के बदलाव छूट सकते हैं।

परिणाम देखें और काम बचाकर पुनर्प्राप्त करें

Integration के बाद अपेक्षित बदलावों से तुलना करें और repository के आवश्यक checks चलाएँ। पहले प्रकाशित ब्रांच पर rebase हुआ हो तो remote अपडेट से पहले समन्वय करें। --force-with-lease अप्रत्याशित remote स्थिति से कुछ सुरक्षा देता है, लेकिन समन्वय या इतिहास बदलने की अनुमति का विकल्प नहीं।

बाद में गलती दिखे तो backup branch और git reflog देखें। Reflog स्थानीय reference की गतिविधियाँ रखता है और पिछला commit खोजने में मदद कर सकता है। Reset से पहले उस commit से recovery branch बनाएँ। Uncommitted काम बचा हो तो reset --hard पहला उपाय न बनाएँ।

git reflog --date=iso

क्या जाँचें

  • पहले देखें कि कोई बदलाव बिना कमिट किए तो नहीं है।
  • पता रखें कि ब्रांच का उपयोग और कौन करता है।
  • टकराव सुलझाने के बाद बदलावों की समीक्षा करें।

कमांड में ब्रांच के नाम feature और main माने गए हैं। रिपॉज़िटरी में सहयोग के नियमों का पालन करें।

स्रोत

  1. Git: rebase ↗
  2. Git: merge ↗
  3. Pro Git: rebasing ↗
  4. Pro Git: branching and merging ↗
  5. Git: fetch ↗
  6. Git: reflog ↗
  7. Git: push and force-with-lease ↗
ऊपर जाएँ ↑