किसी अन्य सुविधा शाखा पर सुविधा शाखा को पुनः भेजें


304

मेरे पास दो (निजी) फ़ीचर शाखाएँ हैं जिन पर मैं काम कर रहा हूँ।

a -- b -- c                  <-- Master
     \     \
      \     d -- e           <-- Branch1
       \
        f -- g               <-- Branch2

इन शाखाओं पर थोड़ी देर काम करने के बाद मुझे पता चला है कि मुझे Branch1 से Branch2 में बदलाव की आवश्यकता है। मैं Branch1 पर Branch2 में हुए परिवर्तनों को फिर से देना चाहता हूं। मैं निम्नलिखित के साथ समाप्त करना चाहता हूं:

a -- b -- c                  <-- Master
           \
            d -- e -- f -- g <-- Branch1

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

क्या यह कमांड वांछित परिणाम देगा?

(Branch1)$ git rebase --onto Branch1 Branch2

11
आपके प्रश्न का उत्तर देने के लिए, मैं एक परीक्षण भंडार बनाऊंगा, जो आपके द्वारा दिखाए गए कमिटमेंट को बनाएगा और आपके द्वारा दिखाए गए कमांड को आज़माएगा। लेकिन मुझे लगता है कि आप खुद ऐसा कर सकते हैं, इसलिए मैं ऐसा नहीं करने जा रहा हूं :)
डैनियल हिल्ग्रथ

3
धन्यवाद। मैं पहली बार यह अधिकार प्राप्त करने पर तुला हुआ था कि मेरे साथ ऐसा न हो कि मैं आसानी से स्वयं इसका परीक्षण कर सकूं :-)
Arjen

4
मुझे ऐसा लगा, इसीलिए मैंने वह टिप्पणी पोस्ट की :) हर बार जब मैं कुछ करता हूं तो मुझे यकीन नहीं होता कि वह वही करेगा जो मुझे लगता है कि वह करता है, मैं एक परीक्षण भंडार बनाता हूं और वहां अपने परीक्षण करता हूं। या, मैं अपनी वास्तविक रिपॉजिटरी की एक प्रति बनाता हूं और कॉपी पर परीक्षण करता हूं।
डैनियल हिल्गरथ

नोट: Git 2.0 इस तरह के रिबेट के लिए एक शॉर्टकट पेश करेगा git rebase -:। देखने के नीचे मेरा उत्तर
VonC

5
माइनर नोट: यहां उत्तर ब्रांच 2 को परिणाम के रूप में देते हैं। ओपी शाखा 1 चाहता था। या मुझे कुछ याद आया?
जोसेफ

जवाबों:


352
  1. शाखा 2 पर स्विच करें

    git checkout Branch2
    
  2. ब्रांच 1 परिवर्तनों के शीर्ष पर वर्तमान (ब्रांच 2) परिवर्तनों को लागू करें, ब्रांच 2 में बने रहें:

    git rebase Branch1
    

जो आपको Branch2 में वांछित परिणाम के साथ छोड़ देगा:

a -- b -- c                      <-- Master
           \
            d -- e               <-- Branch1
           \
            d -- e -- f' -- g'   <-- Branch2

आप Branch1 को हटा सकते हैं।


धन्यवाद! रिबासिंग के बाद शाखा को हटाने पर मुझे एक संदेश मिलता है कि शाखा पूरी तरह से विलय नहीं हुई है। मुझे लगता है कि मैं इस संदेश को सुरक्षित रूप से अनदेखा कर सकता हूं और डिलीट को बाध्य कर सकता हूं?
अर्जुन

10
क्या वह Branch1 में सभी परिवर्तन नहीं करना चाहता था?
tomasz_kusmierczyk

6
ऐसा लगता है कि वह जो चाहता था उसके विपरीत है, नहीं?
१२५२ --४

1
दरअसल, @tomasz_kusmierczyk और @ 1252748, और मैं खुद भी उलझन में पड़ गया। लेकिन तब मुझे एहसास हुआ कि git rebaseBranch1 में रहते हुए प्रदर्शन करने से Branch1 के इतिहास में फिर से लिखा जाएगा कि शाखा 1 से कॉपी किए गए लोगों के ऊपर शाखा 1 के परिवर्तन होंगे। यही कारण है कि निम्नलिखित में परिणाम, आदेश के लिए प्रतिबद्ध होगा a - b - f - g - c' - d' - e'
ईल घीज

1
@tomasz_kusmierczyk और 1252748, यह जो वह चाहता है उसके विपरीत नहीं है, यह बिल्कुल वही है जो वह चाहता था। शाखा के नाम मायने नहीं रखते, आप हमेशा उन्हें बदल सकते हैं।
a3y3

56

नोट: यदि आप पर थे Branch1, तो आप Git 2.0 (Q2 2014) के साथ टाइप करने में सक्षम होंगे:

git checkout Branch2
git rebase -

ब्रायन गेशियाक द्वारा प्रतिबद्ध 4f40740 देखें :modocache

rebase: -पिछली शाखा के लिए " " शॉर्ट-हैंड की अनुमति दें

उसी शॉर्टहैंड को सिखाएं checkoutऔर mergeजिस शाखा को rebaseवर्तमान शाखा को नाम देना है ; वह है, कि " -" का अर्थ है "वह शाखा जो हम पहले थे"।


26
अच्छा है, लेकिन थोड़ा खतरनाक भी है। कभी-कभी वर्बोसिटी जीत जाती है। लेकिन फिर, मुझे जावा भी पसंद है ... (-:
sthzg

3

मुझे पता है कि आपने रिबेस को कहा था, लेकिन मैं चेरी-पिक करना चाहता था, जिसके बदले मैं ब्रांच 2 से ब्रांच 1 में जाना चाहता था। इस तरह, मुझे यह ध्यान रखने की आवश्यकता नहीं है कि मास्टर से कौन सी शाखा बनाई गई थी, और मुझे विलय पर अधिक नियंत्रण होगा।

a -- b -- c                  <-- Master
     \     \
      \     d -- e -- f -- g <-- Branch1 (Cherry-Pick f & g)
       \
        f -- g               <-- Branch2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.