2016-02-25 7 views
8

मेरे पास दो शाखाएं हैं जो मैं अपस्ट्रीम/मास्टर के शीर्ष पर रखती हूं। एक शाखा में दूसरा पूर्वज होता है ताकि वे एक रेखा बना सकें।एक ही वंशावली में कई शाखाओं को पुनर्जीवित करने का सबसे आसान तरीका

U1 (upstream/master) 
    \ 
    A -- B (fixes) 
     \ 
      C -- D (features) 

बाद में, नदी के ऊपर/मास्टर आगे बढ़ता है ...

U1 -- U2 (upstream/master) 
    \ 
    A -- B (fixes) 
     \ 
      C -- D (features) 

... और मुझे शीर्ष पर दोनों शाखाओं rebase करना चाहते हैं।

U1 -- U2 (upstream/master) 
     \ 
     A' -- B' (fixes) 
       \ 
        C' -- D' (features) 

मुझे यह करने के दो तरीके पता हैं, प्रत्येक को कमियां हैं।

git rebase upstream/master fixes 
git rebase fixes features 

ये दो आदेश कभी-कभी काम करते हैं और कभी-कभी मुझे दूसरे आदेश पर संघर्ष विलय देते हैं।

git rebase upstream/master features 
# figure out the hash code of the new commit corresponding with B' 
git branch -f fixes <sha of B'> 

इसमें केवल एक ही विद्रोह शामिल है, लेकिन शाखाओं को स्थानांतरित करना कठिन और त्रुटि प्रवण है।

मैंने रीबेस - स्पेसर्व-विलय में देखा, लेकिन ऐसा प्रतीत नहीं होता क्योंकि कोई विलय नहीं होता है।

क्या पुनर्जन्म को पूरा करने का कोई बेहतर तरीका है?

+3

आप मुझे इस तरह एक एहसान और उपयोग चित्र कर सका: 'ए - बी - C'? इससे न केवल आपके प्रश्न को सोचने में आसान लगेगा, इससे भविष्य में दूसरों के लिए यह अधिक उपयोगी हो जाएगा। –

+1

संपादित। क्या यह और स्पष्ट है? –

+0

बहुत अच्छी नौकरी, मैंने ऊपर उठाया है। –

उत्तर

2

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

उदाहरण के लिए।

Git नदी के ऊपर/मास्टर सुविधाओं

U1 -- U2 (upstream/master) 
     \ 
     A' -- B' 
       \ 
        C' -- D' (features) 

Git शाखा -f फिक्स (बी के लिए SHA ') # बदलें जहां शाखा इशारा कर रही है rebase।

U1 -- U2 (upstream/master) 
     \ 
     A' -- B' (fixes) 
       \ 
        C' -- D' (features) 
संबंधित मुद्दे