GIT एक शाखा में मास्टर को मर्ज करता है


49

मैं एक नई शाखा में एक नई सुविधा विकसित कर रहा हूं, और मेरी मास्टर शाखा में कुछ बदलाव किए हैं।

क्या नई शाखा के समाप्त होने के बाद मास्टर शाखा को मेरी नई शाखा में विलय करना संभव है, ताकि नई सुविधा समाप्त होने के बाद मेरे पास बहुत सारे मर्ज टकराव न हों?


क्या आपने गिट-मर्ज की कोशिश की है? यहां मदद करें
1921 को

जवाबों:


56

आप git merge masterया तो कर सकते हैं git rebase master, इस मामले में मैं git rebase पसंद करेंगे ।

क्योंकि git rebaseयह ऐसा बनाता है जैसे कि मास्टर शाखा में परिवर्तन के ऊपर फीचर शाखा में बदलाव किए गए थे, जो संस्करण ग्राफ को सरल बनाता है।

रिबेस

से उदाहरण लें Git रिबेस मैनुअल , git rebase masterशाखा में feature:

      A---B---C feature                             A'--B'--C' feature
     /                   --rebase-->               /
D---E---F---G master                  D---E---F---G master

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

git rebase masterशाखा में वास्तविक परिणाम featureयह है:

      ( A---B---C )
       /
      /       A'--B'--C' feature
     /       /
D---E---F---G master

रीटेस के बाद कमिट ए, बी, सी लटक रहे हैं, लेकिन फिर से उपलब्ध हैं git reflog feature

मर्ज

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

यह git merge masterशाखा का परिणाम है feature:

      A---B---C feature                    A---B---C---M feature
     /                   --merge-->       /       ,---’
D---E---F---G master                 D---E---F---G master

वैकल्पिक रूप से, यदि आप git merge featureशाखा में हैं master, तो यह इस तरह दिखेगा:

      A---B---C feature                    A---B---C feature
     /                   --merge-->       /         \
D---E---F---G master                 D---E---F---G---M master

आपको यह बताना चाहिए कि आप रिबेज क्यों पसंद करते हैं और क्या अंतर है। रेबेस एक रैखिक इतिहास बनाता है - यह इस सवाल के लायक नहीं हो सकता है।
एंड्रियास रेहम

ठीक है अगर मैं इसे अच्छी तरह से समझता हूं: मुझे मास्टर शाखा को चेकआउट करना होगा अगर न्यूफ़िएट अभी तक समाप्त नहीं हुआ है और अगर यह समाप्त हो गया है तो एक रिबेस?
एमएनएमएल

नहीं, सुविधा शाखा की जाँच के साथ, करते हैं git rebase master, और यह सुविधा शाखा में परिवर्तनों को "रद्द" कर देगा ताकि वे मास्टर शाखा में परिवर्तनों पर "आधारित" हों। यदि सुविधा शाखा में परिवर्तन के साथ मास्टर शाखा संघर्ष में परिवर्तन होता है, तो गिट आपको उन्हें हल करने और जारी रखने, उन्हें छोड़ने या गर्भपात करने के लिए कहेंगे। यदि आप अनिश्चित महसूस करते हैं, तो आप इस पर प्रयास करने के लिए एक परीक्षण शाखा की जांच कर सकते हैं git checkout -b test-feature feature(यह मानते हुए कि आपकी सुविधा शाखा को "सुविधा" नाम दिया गया है)।
क्रिस्टोफर हैमरस्ट्रॉम

2
आपका क्या मतलब है "अब मेरी शाखा नहीं देख सकता"? वैसे भी, git rebaseकेवल तभी उपयोग किया जाना चाहिए यदि शाखा वितरित नहीं की गई है, जिसे मैंने माना था क्योंकि आपने कहा था कि यह एक नई शाखा थी, इसके बारे में क्षमा करें। मेरे द्वारा लिंक किए गए डॉक्स में अपस्ट्रीम रिबास से पुनर्प्राप्त करना देखें । आपको git mergeइसके बजाय उपयोग करना होगा। और git reflogयदि आप इसे वापस पाना चाहते हैं तो आप अपने पिछले फीचर ब्रांच हेड को खोजने के लिए उपयोग कर सकते हैं ।
क्रिस्टोफर हैमरस्ट्रॉम

1
मैंने मर्ज और रिबेस के बीच के अंतर के बारे में स्पष्ट व्याख्या नहीं देखी है। धन्यवाद।
पाउलो पेड्रोसो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.