2010-04-22 20 views
6

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

क्या रीबेस स्वचालित रूप से कहीं भी प्रतिबद्ध के रूप में सहेजा गया है?

बस उन संशोधनों को कहां रहते हैं? मैं गिटक, या git log --oneline में कुछ भी नहीं देख सकता।

(जब मैं रिबेसिंग के बाद अपनी शाखा वापस विलय के लिए एक ही सवाल।)

उत्तर

9

रीबेस एक और शाखा के शीर्ष पर चल रहा है। यदि स्थानांतरित होने वाली प्रतिबद्धता विवाद विलय का कारण बनती है, तो यह प्रतिबद्धता विलय समाधान को प्रतिबिंबित करने के लिए बदल दी जाती है।

रीबेस का उद्देश्य आपकी प्रतिबद्धता को इस तरह दिखता है कि वे उस शाखा में परिवर्तन कर रहे हैं जिस पर आप पुन: प्रयास करते हैं। इसलिए सबसे तार्किक तरीका इन प्रतिबद्धताओं में मर्ज विवादों को शामिल करना है। इस प्रकार कोई अतिरिक्त काम की आवश्यकता नहीं है।

विलय अलग है, क्योंकि यह अलग-अलग शाखाओं को विलय करने की स्पष्ट कार्रवाई है। प्रत्येक शाखा में कोई काम नहीं आता है। विवाद समाधान विलय प्रतिबद्धता में परिलक्षित होता है।

4

हाँ, सफल rebases और मर्ज के प्रतिबद्ध हैं। वे केवल संघर्षों की प्रतिबद्धता नहीं करेंगे जिन्हें हल करने की आवश्यकता है, लेकिन फिर रिबेस (या मर्ज) का आउटपुट आपको बताएगा कि यह हुआ है और इसे कैसे हल किया जाए।

एक रिबेस के लिए, आपको केवल इंडेक्स में संघर्षों को हल करने की आवश्यकता है और फिर git rebase --continue

विलय के लिए, आपको प्रतिबद्धता (git commit) बनाने की आवश्यकता है, लेकिन तथ्य यह है कि यह एक विलय है और आपके लिए संपादित करने के लिए एक उपयुक्त डिफ़ॉल्ट प्रतिबद्ध संदेश प्रदान किया जाएगा।

+0

इस उत्तर मैं जरूरत है। मैं उनके अतिरिक्त मूल्य के लिए लंबे प्रयासों की सराहना करता हूं, लेकिन उन्हें वास्तव में शुरुआत में उपर्युक्त पाठ को कम से कम शामिल करना चाहिए। जब मैं और अधिक बोल्ड हो जाता हूं तो मुझे लगता है कि मैं सिर्फ जवाब संपादित करना शुरू कर दूंगा ताकि शीर्ष रैंकिंग वाले उत्तर में संक्षेप में "उत्तर" भी हो ... वैसे भी, जिस तरह से मुझे इसकी आवश्यकता है, उसका जवाब देने के लिए धन्यवाद देना चाहता हूं। – msouth

2

पुराने दिनों में (2006, 1.5.3 से पहले और its user manual), git rebasepresented like so था:

चेरी उठा का एक विशेष मामला है अगर आप एक के लिए एक पूरी शाखा ले जाना चाहते हैं नया "आधार" प्रतिबद्धता।
यह git-rebase द्वारा किया जाता है।
आप स्थानांतरित करने के लिए शाखा निर्दिष्ट (डिफ़ॉल्ट HEAD) और जहां के लिए (कोई डिफ़ॉल्ट) ले जाने के लिए, और:

  • git cherry-picks कि शाखा से बाहर हर पैच,
  • लक्ष्य के शीर्ष पर लागू होता है ,
  • और नव निर्मित प्रतिबद्धताओं के लिए refs/heads/<branch> पॉइंटर को स्थानांतरित करता है।
परिभाषा से

तो, बना दिया करता जाएगा (और कोई करना पड़ता प्रतिबद्ध)

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

एक शाखा "देव" कहा जाता है आप वर्तमान प्रधान में दो सुविधाओं के विकास को मिलाया गया है मान लीजिए,।

x-x-x-x (master) 
     \ 
     -f1a-f1b-f1c-f2a-f2b-f2c (dev, HEAD) 

आप "dev1" और "dev2" में उन्हें विभाजित करना चाहते हैं। यह मानते हुए कि HEAD मास्टर एक शाखा है, तो आप के माध्यम से

git log master..HEAD 

देख सकते हैं या तो या सिर्फ

git rev-list master..HEAD 

किसी भी तरह से साथ प्रतिबद्ध के एक कच्चे सूची प्राप्त, मान लीजिए कि आप dev1 में इच्छित कामों की एक सूची निकालते हैं और उस शाखा को बनाते हैं:

git checkout -b dev1 master 
for i in `cat commit_list`; do 
    git-cherry-pick $i 
done 

     -f1a'-f1b'-f1c' (dev1, HEAD) 
    /
x-x-x-x (master) 
     \ 
     -f1a-f1b-f1c-f2a-f2b-f2c (dev) 

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

git checkout -b dev2 dev # Create dev2 branch 
git-rebase --onto master dev1 # Subreact dev1 and rebase 

यह dev1 में सभी पैच कि dev में हैं और नहीं मिलेगा, मास्टर की चोटी पर उन्हें लागू है, और परिणाम dev2 कहते हैं। संक्षिप्त और सटीक -

 -f1a'-f1b'-f1c' (dev1, HEAD) 
    /
x-x-x-x (master) 
     \ 
     -f2a-f2b-f2c (dev2, HEAD) 
+0

वाह! यह दिमागी उड़ रहा है, दोनों इंद्रियों में (आश्चर्यजनक रूप से शक्तिशाली, और मेरे सिर को पाने में मुश्किल) – Benjol

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