मैं वर्षों से रिबेट का उपयोग कर रहा हूं और मुझे कभी इस तरह की समस्या का सामना नहीं करना पड़ा। हालाँकि, आपकी पहली समस्या यह है कि आप इसे दूरस्थ शाखा पर सीधे development
दूरस्थ रिपॉजिटरी से करने की कोशिश करते हैं , जिसे कहा जाता है origin
। यह शाब्दिक रूप से गलत है क्योंकि रिबेस एक खतरनाक कमांड है, जो गिट इतिहास को पुनर्गठित करता है। यह कहने के बाद, आपको पहले अपने स्थानीय भंडार पर प्रयास करना चाहिए और केवल इसे धकेलना चाहिए, अगर यह आपके लिए अपेक्षित है।
तो, मेरा सामान्य रिबेट वर्कफ़्लो निम्नलिखित लगता है (लेकिन कृपया ध्यान रखें, कि आपको शाखाओं पर रिबास का उपयोग नहीं करना चाहिए, जो आप केवल एक ही समिति नहीं हैं। ऐसी शाखाओं के लिए, बस लागू होने और संघर्ष को हल करने के लिए उपयोग करें, यदि लागू हो):
- सुनिश्चित करें कि आपके पास एक साफ-सुथरा काम करने वाला पेड़ है (कोई असहज परिवर्तन नहीं)
- उस शाखा को चेकआउट करें जिस पर आप रिबास करना चाहते हैं (उदाहरण के लिए, मान लें कि यह
master
एक पंक्ति के रूप में है):git checkout master && git pull origin master && git checkout development
- वास्तविक प्रतिपूर्ति करें:
git rebase master
- यदि यह पूरा हो गया है और सब कुछ उम्मीद के मुताबिक काम करता है, तो इसे अपने रिमोट पर धकेल दें। ऐसा करने के लिए, आपको इसे मजबूर करने की आवश्यकता है, क्योंकि रिमोट होस्ट में पहले से ही एक और क्रम में इतिहास है, रिमोट पुश करने के लिए कुछ भी नहीं के साथ जवाब देगा। इसलिए, हमें यह कहना होगा "इतिहास का मेरा स्थानीय संस्करण सही है, इतिहास के मेरे स्थानीय संस्करण का उपयोग करके उस दूरस्थ शाखा पर सब कुछ अधिलेखित करें:"
git push -f origin development
जैसा कि मैंने पहले ही उल्लेख किया है, ध्यान रखें, कि रिबेट गिट इतिहास में हेरफेर करता है, यह आमतौर पर एक बुरी बात है। हालाँकि, यह संभव है कि शाखाओं पर, जहां कोई और नहीं करता है। अन्य डेवलपर्स के लिए शाखा को खींचने में सक्षम रखने के लिए, मर्ज ही, स्क्वैश या चेरीपिक जैसी दूसरी मर्ज रणनीति का उपयोग करें। तो, दूसरे शब्दों में: वितरित विकास पर रिबेस आपका टूल नहीं होना चाहिए। यह आपके लिए ठीक काम करता है यदि आप केवल वही हैं जो इस भंडार पर काम करता है।
हम सुविधा शाखा रणनीति का उपयोग करते हैं। इसमें, मैं आमतौर पर अन्य डेवलपर्स से "अपडेट" प्राप्त करने के लिए रिबेस का उपयोग करता हूं, जो कि इस बीच मास्टर शाखा पर हुआ था। ऐसा करने से, यह उन पुट के आकार को कम कर देता है जो एक पुल अनुरोध में दिखाई देते हैं। इसलिए, कोड समीक्षक के लिए इस सुविधा शाखा में किए गए मेरे परिवर्तनों को देखना आसान हो जाता है।
git-rebase
स्थिति के लिए पूछता है, जबकि उत्तर के लिए एक झंडा देता हैgit-merge