2012-08-28 9 views
5

की मूल बदलने मैं निम्नलिखित स्थिति है:बहुत देर हो चुकी एक शाखा शुरू कर दिया, मेरे शाखा

A---B---F---G---H (master) 
    \ 
     \ 
     C---D---E (experimental) 

मेरे समस्या यह है कि बी एक बहुत-बहुत बुरी बात है कि master पर ऐसा नहीं होना चाहिए है। यह experimental पर है। हालांकि एफ --- जी --- एच ठीक है।

A---F'---G'---H' (master) 
\ 
\ 
    B---C---D---E (experiment) 

मैं के बारे में rebase और ऐसे सामान लेकिन सबसे बड़ी समस्या यह है कि masterorigin को धक्का दे दिया गया है पढ़ा है: वहाँ सब कुछ इस तरह दिखेगा बनाने के लिए एक रास्ता है।

+0

क्या टीम में बहुत से लोग मैन्युअल रूप से सूचित करते हैं कि आप मास्टर को रीबेज करना चाहिए? यदि ऐसा है, तो आप आसानी से बी ' – bcmcfc

+0

वापस करने में सक्षम हो सकते हैं मुझे बी को प्रयोग शाखा –

उत्तर

3

git rebase --onto A B master करेगा।

लगता है कि आपके पास पहले से ही ऑर्गिन को धक्का दिया गया है, अगर आप निश्चित हैं कि मूल की मास्टर शाखा को ओवरराइट करना सुरक्षित है, तो बस मास्टर शाखा पर git push -f करें। सावधान रहें कि जब वे मूल से खींचते हैं तो अन्य डेवलपर्स के साथ संघर्ष हो सकता है।

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

यदि आपके टीम के सदस्यों को रिबेस के बारे में सूचित करना संभव है और आप ऐसा करने का आग्रह करते हैं, तो फिर से लिखना ठीक है, बस सुनिश्चित करें कि यह अक्सर बार-बार नहीं होगा।

+0

पर रखने की आवश्यकता है। इस तरह के विरोधाभासों को' सार्वजनिक रिपोजिटरी में धकेलने वाले कामों को पुन: पोस्ट न करें। 'Http: // git- scm.com/book/en/Git- ब्रांचिंग- रीबेजिंग –

+1

हां, लेकिन आप जो भी पूछ रहे हैं वह इतिहास का एक पुनर्लेख है जो 'गिट रिबेस' इस स्थिति के लिए सिर्फ उपकरण है। आम तौर पर, सार्वजनिक रेपो में शाखा के रूप में रहना चाहिए, जिसका मतलब है कि आप मास्टर में हटाए गए बी को हटाने की उम्मीद नहीं कर सकते हैं, आप बस एक नई प्रतिबद्धता में बी द्वारा पेश की गई गलती को ठीक कर सकते हैं और इसे फिर से दबा सकते हैं। लेकिन अगर आपके टीम के सदस्यों को रिबेस के बारे में सूचित करना संभव है, तो यह एक पुनर्लेखन के लिए ठीक है, बस सुनिश्चित करें कि यह अक्सर बार-बार नहीं होगा। – weynhamz

+0

मैं इस विकल्प का उपयोग कर रहा हूँ। धन्यवाद! –

5

गुरु पर, चलाएँ:

git revert B

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

यह बन जाएगा:।।

A---B---F---G---H---I (master) 
    \ 
     \ 
     C---D---E (experimental) 

जहां I रिवर्ट प्रतिबद्ध है। B की सामग्री को हटाते समय मास्टर अपना इतिहास रखता है, प्रयोगात्मक B के परिवर्तन को बरकरार रखता है।

यदि आप बाद में मास्टर में प्रयोगात्मक विलय करते हैं तो आपको I प्रतिबद्ध करना होगा।

+3

आपके उत्तर के लिए धन्यवाद लेकिन यह इतिहास जटिल दिखता है, इसलिए मुझे लगता है कि मैं अपने 2 साथी डेवलपर्स को नाराज करने और रिबेस के साथ जाने का जोखिम उठाने जा रहा हूं। हालांकि आपके लिए +1। –

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