सामग्री पर जाएं
GitTree
गिट गाइड8 मिनट पढ़ा

Git रीबेस शाखा: चरण दर चरण सुरक्षित रूप से रीबेस कैसे करें

रीबेसिंग के लिए एक आदेश की आवश्यकता होती है। इसे सुरक्षित रूप से करने में कुछ और समय लगता है: पुराने टिप को सहेजना, प्रत्येक संघर्ष को संभालना, परिणाम की तुलना करना, और किसी टीम के साथी को ओवरराइट किए बिना आगे बढ़ना। ये है पूरा क्रम.

द्वारा लिखित Kodmora

GitTree के पीछे सॉफ्टवेयर हाउस

अद्यतन किया गया
  • पुनः आधार
  • शाखाएँ
  • विवादों को मर्ज करें
  • रिमोट और पुश
इस पेज पर

किसी शाखा को पुनः आधार बनाने के लिए, उसे प्राप्त करें, उस पर स्विच करें और उसे नए आधार पर पुनः चलाएँ: `git fetch origin`, `git switch topic`, `git rebase origin/main`। Git आपकी शाखा की स्वयं की कमिटों को एक तरफ सेट करता है, शाखा को origin/main की नोक पर ले जाता है, फिर एक समय में एक कमिट को फिर से लागू करता है। इतिहास बिना किसी मर्ज कमिट के एक सीधी रेखा में रहता है। प्रत्येक दोबारा चलाए गए कमिट को एक नया हैश मिलता है, इसलिए जिस शाखा को आपने पहले ही पुश कर दिया है उसे बाद में git push --force-with-lease की आवश्यकता होती है।

Git रिबेस किसी शाखा के लिए क्या करता है?

मान लीजिए कि topic की अपनी दो कमिट हैं, और शाखा शुरू होने के बाद से main ने तीन कमिट हासिल की हैं। आपकी शाखा में main को मर्ज किए बिना उस शुरुआती बिंदु को अपडेट करना:

# before
A---B---C---D---E   origin/main
     \
      F---G         topic

# after git rebase origin/main
A---B---C---D---E   origin/main
                 \
                  F'---G'   topic

F' और G' में वही परिवर्तन और संदेश हैं जो F और G में हैं, लेकिन वे नए हैश के साथ नए कमिट हैं, क्योंकि उनके माता-पिता बदल गए हैं। एक ही शुरुआती बिंदु से विलय दोनों पंक्तियों को बनाए रखेगा और दो माता-पिता के साथ एक कमिट जोड़ देगा। मर्ज बनाम रीबेस पर पाठ दोनों को एक ग्राफ़ पर दिखाता है।

मैं किसी शाखा को चरण दर चरण सुरक्षित रूप से कैसे पुनः आधार बना सकता हूँ?

पहले निरीक्षण करें, पुरानी टिप रखें, दोबारा चलाएं, फिर परीक्षण करें। पहले तीन आदेश कुछ भी दोबारा नहीं लिखते:

# 1. update origin/main, your files stay as they are
git fetch origin

# 2. list the commits Git will replay
git log --oneline origin/main..topic

# 3. keep a name on the old tip
git branch topic-backup topic

# 4. replay
git switch topic
git rebase origin/main

यदि सूची में कोई कमिट है जिसे आप नहीं पहचानते हैं तो चरण 2 पर रुकें, क्योंकि इसका मतलब है कि शाखा वहां शुरू नहीं हुई जहां आपने सोचा था। जब रिबेस समाप्त हो जाए, तो इसके समाप्त होने की पुष्टि करने के लिए git status चलाएँ, फिर अपने परीक्षण चलाएँ। बिना किसी विरोध के एक रिबेस अभी भी व्यवहार को तोड़ सकता है।

हर बार आधार का नाम बताएं. एक बेअर git rebase शाखा के अपस्ट्रीम का उपयोग करता है, जो अक्सर origin/topic होता है, न कि main। किसी अन्य फ़ीचर शाखा से शुरू हुई शाखा को स्थानांतरित करने के लिए, पुराने आधार को भी नाम दें: git rebase --onto main old-base topic। अप्रकाशित कार्य को पुनः आधार बनाना पर पाठ वास्तविक ग्राफ़ पर इसका अभ्यास करता है।

मैं रिबेस के दौरान विवादों को कैसे ठीक करूं?

Git आपके कमिट को एक-एक करके लागू करता है, इसलिए यह एक से अधिक बार रुक सकता है, यहां तक ​​कि एक ही पंक्ति में भी। केवल उस कमिट को ठीक करें जिस पर Git रुका था, क्योंकि बाद वाले अभी तक लागू नहीं किए गए हैं:

# edit the file and remove the conflict markers, then
git add path/to/file
git rebase --continue
रिबेस स्टॉप का उत्तर देने के तीन तरीके
आदेशयह क्या करता हैजब इसका प्रयोग करें
git rebase --continueचरणबद्ध परिणाम को रिकॉर्ड करता है और अगली कमिट पर ले जाता है।संघर्ष का समाधान और स्टेजिंग किया जाता है।
git rebase --skipदोबारा चलाए जा रहे कमिट को छोड़ देता है।आपने पुष्टि की है कि परिवर्तन पहले से ही अपस्ट्रीम है।
git rebase --abortरुकता है और शाखा को वहीं लौटा देता है जहाँ वह थी।आपने गलत आधार या शाखा चुनी, या टकराव पर अधिक विचार करने की आवश्यकता है।

यदि आप एक ही संघर्ष को बार-बार दोहराते हैं, तो git config rerere.enabled true आपके रिज़ॉल्यूशन को रिकॉर्ड करता है और उसका पुन: उपयोग करता है। प्रत्येक पुन: उपयोग किए गए परिणाम की जांच करें, क्योंकि कल का उत्तर आज के कोड में गलत हो सकता है। जारी रखें, छोड़ें और निरस्त करें पर पाठ प्रत्येक मामले से गुजरता है, और मर्ज विवादों को कैसे हल करें में मार्करों को पढ़ना शामिल है।

मैं पुश करने से पहले रिबेस की जाँच कैसे करूँ?

किसी और के देखने से पहले पुरानी श्रृंखला की तुलना नई श्रृंखला से करें:

# old and new commits, matched pair by pair
git range-diff origin/main topic-backup topic

# everything the branch adds to main, as one diff
git diff origin/main...topic

# the shape of the history
git log --graph --oneline --decorate origin/main topic

git range-diff दिखाता है कि कब किसी विरोध समाधान ने पैच बदल दिया, या कब कोई कमिट गायब हो गई। संकलित कोड अभी भी एक गिराए गए परीक्षण या बदली हुई स्थिति को छिपा सकता है, और यहीं आप इसे पकड़ सकते हैं।

मैं रिबेस को पूर्ववत कैसे करूँ?

जब यह चल रहा हो, तो git rebase --abort का प्रयोग करें। एक बार जब यह समाप्त हो जाए, तो शाखा को वापस पुराने सिरे पर ले जाएँ। पहले git status जांचें, क्योंकि --hard बिना कमिट के परिवर्तनों को खारिज कर देता है:

git reset --hard topic-backup

# no backup? find the old tip in the reflog
git reflog show topic
git reset --hard <old-tip-hash>

रीसेट, रीबेस या कमिट को पूर्ववत करने की मार्गदर्शिका रीफ्लॉग को अधिक गहराई से कवर करती है।

मैं रीबेस की गई ब्रांच को कैसे पुश करूँ?

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

git fetch origin
git log --oneline topic..origin/topic
git push --force-with-lease origin topic

उस git log में केवल आपके पुराने कमिट सूचीबद्ध होने चाहिए। और कुछ भी टीम के साथी का काम है, इसलिए रुकें और पहले इसे लेकर आएं। --force-with-lease दूरस्थ शाखा को केवल तभी बदलता है जब यह अभी भी वहीं है जहां आपके अंतिम प्रयास ने इसे देखा था, और स्पष्ट रूप से --force के पास ऐसी कोई जांच नहीं है। बैकग्राउंड फ़ेच उस मान को अपडेट करता है, इसलिए स्क्रिप्ट उस कमिट को नाम दे सकती हैं जिसकी वे अपेक्षा करते हैं: git push --force-with-lease=topic:<expected-hash> origin topic।

क्या मुझे इस शाखा का नवीनीकरण या विलय करना चाहिए?

स्थिति के अनुसार पुनः आधार बनाना या विलय करना
स्थितिउपयोग करेंक्यों
आपकी अपनी अल्पकालिक विषय शाखापुनः आधारएक सीधा इतिहास जो कमिट दर कमिट पढ़ता है।
वह शाखा जिसे दूसरों ने प्राप्त किया हो या उस पर बनाया होविलययह कुछ भी दोबारा नहीं लिखता, इसलिए किसी को भी अपने काम की मरम्मत नहीं करनी पड़ती।
एक दीर्घकालिक एकीकरण शाखाविलययह विकास की दोनों पंक्तियों का रिकॉर्ड रखता है।
समीक्षाधीन एक शाखाएक बार समीक्षक सहमत हो जाएं तो दोबारा आधार बनाएंटिप्पणियाँ उन कमिटों की ओर इशारा कर सकती हैं जो बदलने वाली हैं।

GitTree में किसी शाखा का रिबेस कैसे करें

  1. नया आधार चुनें

    अपनी शाखा देखें, उस शाखा पर राइट-क्लिक करें जिसके शीर्ष पर आप अपना काम चाहते हैं, जैसे कि develop, और Rebase … onto … पर चुनें।

  2. विकल्पों की जाँच करें

    पुष्टिकरण कहता है कि प्रत्येक कमिट को एक नई आईडी के साथ दोबारा चलाया जाता है और पुरानी शाखा को रखा जाता है। आप स्थानीय परिवर्तनों को संग्रहीत भी कर सकते हैं और उन्हें वापस रख सकते हैं।

  3. प्रत्येक चरण का पालन करें

    एक बैनर दिखाता है Rebasing … onto …, step … of …। यदि कोई चरण विरोध करता है, तो Resolve फ़ाइलें खोलता है, Continue चलता है, Skip उस कमिट को हटा देता है और Abort… शाखा को वापस वैसे ही रख देता है जैसे वह थी।

  4. समीक्षा करें कि क्या परिवर्तन हुआ

    What Changed… (Alt+D) रीबेस से पहले और बाद में कमिट की तुलना जोड़ी दर जोड़ी करता है, जैसे git range-diff।

  5. पुश करें, या पूर्ववत करें

    रिमोट पर पहले से मौजूद शाखा के लिए Force Push (With Lease)… का उपयोग करें। Undo शाखा को वहीं लौटा देता है जहां वह थी, और पुरानी कमिटों को refs/ogt/trash के अंतर्गत रखा जाता है।

GitTree में एक रुका हुआ चरण: दोनों तरफ, आउटपुट, और बैनर में जारी रखें और निरस्त करें।
GitTree में एक रुका हुआ चरण: दोनों तरफ, आउटपुट, और बैनर में जारी रखें और निरस्त करें।

किसी शाखा को पुनः स्थापित करने की मार्गदर्शिका में हर विकल्प है, और पट्टे के साथ बलपूर्वक पुश पुश को कवर करता है। रास्ते में स्क्वैश, रीवर्ड या रीऑर्डर करने के लिए, जीयूआई में इंटरैक्टिव रीबेस पढ़ें।

GitTree में इंटरैक्टिव रीबेस संपादक हर उस कमिट को दिखाता है जिसे कुछ भी बदलने से पहले दोबारा चलाया जाएगा।
GitTree में इंटरैक्टिव रीबेस संपादक हर उस कमिट को दिखाता है जिसे कुछ भी बदलने से पहले दोबारा चलाया जाएगा।

अक्सर पूछे जाने वाले प्रश्न

क्या गिट रिबेस परिवर्तन खो देता है?

अपने आप से नहीं. Git आपके बदलावों को नए कमिट में दोहराता है। जब आप किसी कमिट को छोड़ देते हैं, git rebase --skip चलाते हैं, या किसी विवाद को गलत तरीके से हल करते हैं तो काम गायब हो जाता है। Git उन कमिटों को भी छोड़ देता है जिनके परिवर्तन पहले से ही अपस्ट्रीम हैं।

Git rebase --abort और reflog के बीच क्या अंतर है?

git rebase --abort केवल तभी काम करता है जब रिबेस प्रगति पर हो। इसके समाप्त होने के बाद, रीफ्लॉग शाखा की पिछली युक्तियों को रखता है, ताकि आप उनमें से किसी एक पर रीसेट कर सकें।

क्या मैं उस शाखा को दोबारा आधार बना सकता हूँ जिसमें मर्ज कमिट शामिल हैं?

हाँ। git rebase --rebase-merges origin/main उन्हें रखता है. उस विकल्प के बिना Git शाखा को समतल कर देता है और मर्ज कमिट को छोड़ देता है।

रिबेस के बाद गिट पुश विफल क्यों हो जाता है?

दूरस्थ शाखा में अभी भी पुरानी कमिट हैं, जो आपकी पुनर्लिखित शाखा में नहीं हैं। उन्हें जांचें, फिर git push --force-with-lease origin topic का उपयोग करें।

क्या मुझे मुख्य या मूल/मुख्य पर पुनः आधार बनाना चाहिए?

git fetch origin के बाद origin/main का प्रयोग करें। यह नवीनतम प्रकाशित स्थिति है, और आपको पहले अपना स्थानीय main अपडेट करने की आवश्यकता नहीं है।

सूत्र

अन्य उत्पादों के बारे में दावों की जाँच उनके आधिकारिक पेजों के विरुद्ध 7 नवंबर 2026 पर की गई। कीमतें और सुविधाएँ बदलती हैं; विक्रेताओं के पृष्ठ सत्य का स्रोत हैं।