2012-06-29 12 views
10

इस लेख पढ़ने के बाद, यह समझ में आता है मेरी सुविधा शाखा को पर मुख्य शाखा से परिवर्तन इकट्ठा करने के लिए rebase करने के लिए: Git workflow and rebase vs merge questionsजीआईटी एक शाखा को रिबेस करें जिस पर सहयोग किया गया है?

clone the remote repo 
git checkout -b my_new_feature 
..work and commit some stuff 
git rebase master 
..work and commit some stuff 
git rebase master 
..finish the feature 
git checkout master 
git merge my_new_feature 

यह अच्छा काम करता है, तो सुविधा शाखा मेरी मशीन के लिए स्थानीय है और मैं फिर से लिखने कर सकते हैं जैसा कि मैं कृपया इतिहास।

लेकिन अगर मैं सुविधा शाखा पर किसी और के साथ सहयोग करता हूं तो क्या होगा। हम मुख्य शाखा से नवीनतम फीचर शाखा में अब हमारे फीचर शाखा में नवीनतम परिवर्तन कैसे प्राप्त कर सकते हैं कि हमारी फीचर शाखा रिमोट रिपोजिटरी में आयोजित की जाती है?

तो हम विलय करते हैं? या ऐसा करने के लिए एक और स्लिम जीआईटी विधि है?

अग्रिम धन्यवाद!

उत्तर

1

यदि आप अकेले काम कर रहे हैं तो rebases कुछ भी नहीं करते हैं। आपने मास्टर के लिए कुछ नया नहीं किया है।

आपका मर्ज एक हो जाएगा तेजी से आगे विलय और आप बिल्कुल

git push . HEAD:master 

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

आपको अपनी शाखा रणनीति और जो आप प्राप्त करना चाहते हैं, उसके बारे में सोचने की आवश्यकता है। यहाँ मेरा है:

http://dymitruk.com/blog/2012/02/05/branch-per-feature/

आप देख सकते हैं कि एक ही जगह से प्रत्येक शाखा शुरू होता है। आपके पास एक अलग एकीकरण शाखा है और उम्मीदवार शाखा को रिलीज करते समय उन सुविधाओं को मिलाकर मिलान करने के लिए रिलीज करें जिन्हें आप दूषित नहीं करते हैं।

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

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

+0

Dynmitruk: पोस्ट और लिंक के लिए धन्यवाद। लिंक से, ऐसा लगता है जैसे चेरी-पिकिंग उपलब्ध समाधान के करीब है। अपना समय देने के लिए धन्यवाद! –

2

एक पूरी तरह से अलग वर्कफ़्लो पर स्विच किए बिना आपके मामले का समाधान है।

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

फीचर विकास इतिहास को यथासंभव स्वच्छ और रैखिक के रूप में बनाए रखने के लिए सभी सहयोगियों को अपडेट प्राप्त करने के लिए git pull --rebase का उपयोग करना चाहिए ताकि रास्ते में कोई अर्थहीन विलय कार्य न हो।

यदि आप अभी भी वर्तमान मुख्य विकास शाखा (निरंतर एकीकरण परीक्षण या अन्य उद्देश्यों के लिए) पर एक सहयोगी सुविधा शाखा को पुन: लिखना चाहते हैं या किसी अन्य तरीके से अपने इतिहास को फिर से लिखना चाहते हैं, तो आप इसे पूरा करने के बाद इसे कर सकते हैं, बस मुख्य शाखा में विलय से पहले, लेकिन आपको इसे नई अलग स्थानीय/निजी शाखा में करना चाहिए।

$ git checkout -b feature_final feature # jump to a new branch for grooming 
$ git rebase [-i] master    # rebase topic changes onto master 

से वहाँ आप पर निर्भर है रिबेस शाखा -push नदी के ऊपर के साथ क्या करना है:

यहाँ गुरु से अपने विषय पर परिवर्तन (छोड़ चेरी की पसंद) एक नई शाखा में पुनः बनाने के तरीके है क्यूए के लिए या सीधे मास्टर में विलय करें (यदि आप इतिहास में इसे स्पष्ट करना चाहते हैं तो --no-ff के साथ)।

संबंधित मुद्दे