जैसा कि मैं इसे समझता हूं, फाइलों की स्नैपशॉट्स हैं, इसलिए यदि मैं परिवर्तन ए करता हूं और फिर बी को बदलता हूं, तो बी की प्रतिबद्धता फ़ाइल में पहले से ही परिवर्तन ए में परिवर्तन शामिल हैं, परिवर्तन को पुन: व्यवस्थित नहीं करेंगे एक अनावश्यक?रीटॉर्डरिंग गिट रिबेस का उपयोग करके क्यों काम करता है- मैं इतिहास को खराब नहीं करता?
उत्तर
वास्तव में, यह एक बहुत अच्छा सवाल है, क्योंकि स्नैपशॉट्स करता है।
कारण रिबेस काम करता है एक बदल कर क्योंकि रिबेस वास्तव में (अंत में मोर्चे पर लपेटकर का एक सा के साथ यह पता लगाने की क्या लेने के लिए, और अधिक शाखा लेबल ले जाने के लिए) git cherry-pick
दोहराया है, और git cherry-pick
काम करता है एक बदलाव-सेट में प्रतिबद्ध करें।
उदाहरण के लिए मान लीजिए आप प्रतिबद्ध के इस क्रम है:
A--B--C <-- topic
/
...--o--*--o--o <-- mainline
rebase करने के लिए topic
mainline
पर हम (1) करता है कि topic
पर हैं खोजने की जरूरत है, लेकिन नहीं पर mainline
(जो C
, B
हैं , और A
शीर्ष पंक्ति के साथ, *
चिह्नित प्रतिबद्धता पर समाप्त होने पर), और फिर (2) उन्हें नई प्रतिबद्धताओं में कॉपी करें, हम mainline
की नोक के नीचे जोड़ देंगे।
रिबेस पहले तीन पोस्ट *
करता पाता है और उन्हें एक में रखता है (रिवर्स आदेश दिया: A
, B
, C
) सूची (यह भी डिफ़ॉल्ट रूप से प्रतिबद्ध विलय को छोड़ देता है लेकिन कोई मर्ज के यहाँ हैं)। यह तब प्रत्येक प्रतिबद्धता के लिए एक चेरी उठाता है।
A
चेरी लेने के लिए, *
के विरुद्ध गिट diffs A
। यह दो स्नैपशॉट्स को परिवर्तनों में बदल देता है। A
के खिलाफ B
चेरी लेने
A--B--C <-- topic
/
...--o--*--o--o <-- mainline
\
A' <-- HEAD
करने के लिए B
, Git डिफ: Git तो टिप सबसे करने के लिए परिवर्तन mainline
के लिए प्रतिबद्ध लागू होता है और एक नया प्रतिबद्ध है, चलो, यह A'
फोन एक गुमनाम शाखा पर जाने बनाता है। इन परिवर्तनों को A'
पर लागू करने से एक और प्रतिबद्धता B'
उत्पन्न करती है। C
के लिए दोहराएँ C'
प्राप्त करने के लिए:
A--B--C <-- topic
/
...--o--*--o--o <-- mainline
\
A'-B'-C' <-- HEAD
अंतिम, Git C
से दूर peels topic
लेबल और C'
बजाय करने के लिए यह इंगित करता है। पुराने श्रृंखला को छोड़ दिया जाता है (लेकिन तब भी reflogs के माध्यम से इसे पा सकते हैं, और rebase
प्रतियां विशेष नाम ORIG_HEAD
करने के लिए C
की आईडी के रूप में अच्छी तरह से):
A--B--C [abandoned]
/
...--o--*--o--o <-- mainline
\
A'-B'-C' <-- topic
और अब रिबेस पूरा हो गया है।
ध्यान दें कि यदि आवश्यक हो तो प्रत्येक प्रति गिट के विलय तंत्र का उपयोग करके किया जाता है (यदि अंतर तुरंत साफ नहीं होते हैं)। प्रत्येक का विलय विवाद हो सकता है, जिससे रोकने के लिए रिबेस की आवश्यकता होती है और आपकी मदद मिलती है। (या, बदतर, आप एक गलत विलय प्राप्त कर सकते हैं, हालांकि ये अभ्यास में दुर्लभ हैं।)
और निश्चित रूप से, यदि आप एक इंटरैक्टिव रीबेस में चारों ओर pick
लाइनों को स्थानांतरित करके (आदेशों को फिर से ऑर्डर करते हैं), तो हम केवल उस क्रम को बदलते हैं जिसे हम चुनते हैं और प्रत्येक प्रतिबद्धता को लागू करते हैं। चेरी ले संचालन अभी भी उसी तरह काम करते हैं: तुलना उठाया इसके जनक के खिलाफ प्रतिबद्ध (C
बनाम B
, A
बनाम *
, B
बनाम A
)।
लेकिन diffs डेटा पिछले प्रतिबद्धता में फ़ाइल की सामग्री पर निर्भर करता है, जो उन्हें पुन: व्यवस्थित करने के बाद बदल जाएगा। या यह पुनरावृत्ति केवल कॉस्मेटिक है? –
नई प्रतियां * नई प्रतियां * हैं, जिनके साथ इसका तात्पर्य है। मान लीजिए, उदाहरण के लिए, कि चेरी-पिकिंग 'बी' के दौरान आपको विलय संघर्ष मिलता है क्योंकि 'मेनलाइन' की नोक में एक विरोधाभासी परिवर्तन होता है। जब आप संघर्ष को ठीक करते हैं और रिबेस जारी रखते हैं, तो नई प्रतिबद्धता 'बी' के पास मूल प्रतिबद्धता 'बी' से अलग परिवर्तन होता है। 'बी' और 'बी' दोनों अभी भी भंडार में हैं, और अगली चेरी-पिक (मान लीजिए कि यह' सी' के लिए है) 'बी' से उस परिवर्तन को लागू करने का प्रयास करने से पहले 'सी' से' बी' की तुलना करता है (जो 'बी' अब अलग है, इसलिए एक और विलय संघर्ष हो सकता है!)। – torek
मुझे लगता है कि मैं अब आपकी टिप्पणी पढ़ने और अपना उत्तर दोबारा पढ़ने के बाद इसे देखता हूं। ऐसा लगता है कि मैं अभी शब्दावली से फेंक दिया गया है। जैसा कि मैंने इसे अब देखा है, निश्चित रूप से, कामों को फिर से व्यवस्थित किया जा सकता है लेकिन परिणामस्वरूप रीबेज के बाद परिणाम पूरी तरह से नया होता है चाहे आपने उन्हें फिर से किया हो या नहीं। इसके परिणामस्वरूप एक अलग "स्नैपशॉट फ़ाइल" होती है जो मुख्य रूप से चेरी-पिकिंग से मुख्य रेखा की नोक पर भिन्नता लागू करने का परिणाम है। इस तरह, पुनरावृत्ति कॉस्मेटिक है क्योंकि मूल काम करता है जो कि पुनर्वित्तित किया जाता है अपरिवर्तित छोड़ दिया जाता है। अगर मैं सही हूं तो कृपया मुझे बताएं। –
- 1. गिट इतिहास से फ़ाइल को हटाने से काम नहीं करता
- 2. संघर्ष के साथ गिट रिबेस काम नहीं करता
- 3. मैं गिट रिबेस क्यों करना चाहूंगा?
- 4. गिट रिबेस "--preserve-merges --onto" विलय को सुरक्षित नहीं करता
- 5. गिट रिबेस इंटरैक्टिव: स्क्वैश विलय एक साथ काम करता है
- 6. पुराने गिट को छोड़कर इतिहास से काम करता है?
- 7. #काम क्यों नहीं करता है?
- 8. क्यों काम नहीं करता है?
- 9. गिट रिबेस का उपयोग करके मैं कैसे काम/गठबंधन कर सकता हूं?
- 10. क्यों प्रोजेगार्ड विधि शरीर को खराब नहीं करता है?
- 11. क्यों $() काम नहीं करता है लेकिन jQuery() काम करता है?
- 12. गिट बिसेक्ट काम नहीं करता है, आउटपुट
- 13. गिट - रिबेस रेजिन विलय
- 14. क्यों "गिट स्टेटस" शाखा में अप्रचलित काम नहीं करता है?
- 15. क्यों __unicode__ काम नहीं करता है लेकिन __str__ करता है?
- 16. गिट-संग्रह पुराने काम करता है
- 17. ImageView.setImageMatrix() क्यों काम नहीं करता है?
- 18. गिट: स्थानीय काम करता है
- 19. UIView.exclusiveTouch क्यों काम नहीं करता है?
- 20. क्यों "onicecandidate" काम नहीं करता है?
- 21. क्यों pyplot.show() काम नहीं करता है?
- 22. खराब रिबेस (0)
- 23. Mercurial में, "एचजी नाम बदलें" काम करता है लेकिन इतिहास फ़ाइल का पालन नहीं करता है?
- 24. गिट: गिट svn कैसे काम करता है?
- 25. ToolboxBitmapAttribute क्यों काम नहीं करता है?
- 26. autoReconnect = true क्यों काम नहीं करता है?
- 27. कमांड लाइन से गिट काम नहीं करता है, लेकिन एक गिट क्लाइंट (जैसे स्मार्टगिट) का उपयोग
- 28. getchar() सही क्यों काम नहीं करता है?
- 29. यह रिवाइटरूल क्यों काम नहीं करता है?
- 30. एक गड़बड़ इतिहास को साफ करने के लिए गिट रिबेस का उपयोग कैसे करें
गिट आवश्यकतानुसार भिन्न होता है; रीबेस नई आधार सामग्री के लिए diffs लागू होता है। – jthill