2010-05-20 25 views
13

this article में, लेखक इस चित्र के साथ रिबेसिंग बताते हैं:गिट में विलय पर रिबेस के फायदे क्या हैं?

alt text http://eagain.net/articles/git-for-computer-scientists/git-history.7.png

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

जबकि एक सामान्य मर्ज इस तरह दिख रही है |:

alt text http://eagain.net/articles/git-for-computer-scientists/git-history.5.png

इसलिए, यदि आप rebase , तो आप सिर्फ एक इतिहास राज्य (जो कचरा भविष्य में कुछ समय एकत्र किया जाएगा खो रहे हैं)। तो, कोई भी रीबेज क्यों करना चाहेगा? मुझे यहाँ क्या याद आ रही है?

+0

छवियां काम नहीं कर रही हैं – thodorisbais

उत्तर

30

पर पढ़ने के लिए परिस्थितियाँ होती हैं जिनमें आप rebase करना चाह सकते हैं के विभिन्न प्रकार हैं चाहते हो सकता है।

  • आप अलग-अलग शाखाओं पर एक फीचर के कुछ भागों विकसित करते हैं तो पता ही है कि वे वास्तव में विचारों का एक रेखीय प्रगति कर रहे हैं। उन्हें उस कॉन्फ़िगरेशन में रीबेस करें।

  • आपने गलत जगह से एक विषय फोर्क किया है। शायद यह बहुत जल्दी है (आपको बाद में कुछ चाहिए), शायद यह बहुत देर हो चुकी है (यह वास्तव में पिछले संस्करणों पर भी लागू होती है)। इसे सही जगह पर ले जाएं। "बहुत देर हो चुकी" मामला वास्तव में एक विलय द्वारा तय नहीं किया जा सकता है, इसलिए rebase महत्वपूर्ण है।

  • आप किसी अन्य शाखा के साथ शाखा की बातचीत का परीक्षण करना चाहते हैं, लेकिन किसी कारण से विलय नहीं करना चाहते हैं। उदाहरण के लिए, आप देखना चाहते हैं कि एक ही बार में सभी के बजाय संघर्ष क्या प्रतिबद्ध हैं।

यहाँ सामान्य विषय है कि अत्यधिक विलय clutters इतिहास, और रिबेसिंग एक तरह से यह से बचने के लिए अगर आप अपने शाखा/नहीं मिला सही पहली बार में मर्ज प्लान है। बहुत सारे विलय मानव के इतिहास का पालन करने के लिए कठिन बना सकते हैं, और git-bisect जैसे टूल का उपयोग करना कठिन बना सकते हैं।

  • एकाधिक प्रतिबद्ध किया गया है चाहिए एक प्रतिबद्ध:

    भी सभी कई मामलों जो शीघ्र एक इंटरैक्टिव रिबेस रहे हैं।

  • एक प्रतिबद्ध (वर्तमान में नहीं) कई काम करता है।

  • एक प्रतिबद्ध (वर्तमान में नहीं) को इसमें या उसके संदेश में कोई गलती थी।

  • एक प्रतिबद्ध (वर्तमान नहीं) को हटाया जाना चाहिए।

  • प्रतिबद्धताओं को फिर से व्यवस्थित किया जाना चाहिए (उदाहरण के लिए अधिक तर्कसंगत प्रवाह करना)।

हालांकि यह सच है कि आप इन कार्यों को करने "इतिहास खो", वास्तविकता यह है कि आप केवल स्वच्छ काम को प्रकाशित करना चाहते हैं। अगर कुछ अभी भी अप्रकाशित है, तो इसे में के तरीके से बदलने के लिए इसे पुन: ठीक करना ठीक है। इसका मतलब है कि सार्वजनिक भंडार में अंतिम संस्करण तार्किक और अनुसरण करने में आसान होगा, किसी भी डेवलपर के रास्ते में किसी भी हिचकी को संरक्षित नहीं करेगा।

+2

डर्न किया गया: आज के लिए कोई और वृद्धि नहीं। मैं जोड़ूंगा: http://stackoverflow.com/questions/1241720/git-cherry-pick-vs-merge-workflow, http://stackoverflow.com/questions/457927/git-workflow-and-rebase-vs- मर्ज-प्रश्न, http://stackoverflow.com/questions/1751534/is-there-a-ignignance-in-merge-directions-between-upstream-topic-integration-in/1764180#1764180 (लिनस की टिप्पणी के लिए) – VonC

+0

और मैं एक तरफ भी उल्लेख करता हूं: http://utcc.utoronto.ca/~cks/space/blog/tech/GitNewHistory: "गिट के डिजाइन का अर्थ है कि अपनी प्रकृति से आप इतिहास को फिर से लिख नहीं सकते" – VonC

+1

@VonC: हमेशा की तरह, पिछले प्रश्नों में आपका शोध मुझे दिखाता है। लिंक के लिए धन्यवाद। "पुनर्लेखन इतिहास" के बारे में बिंदु भी एक बहुत अच्छा है। हर किसी के लिए: सारांश यह है कि आप वास्तव में फिर से लिखते नहीं हैं, आप नया इतिहास बनाते हैं और पुराने इतिहास की बजाय इसे इंगित करने के लिए रेफरी अपडेट करते हैं। यहां इस तरह की चीज के बारे में बहुत सारे प्रश्न हैं - इतिहास को ढूंढने के लिए वापस जाकर आप "खो गए" को पुनः प्राप्त करके/संशोधित कर रहे हैं। – Cascabel

2

रीबेसिंग आपको उचित क्रम में विलय लेने की अनुमति देता है। विलय के पीछे सिद्धांत का मतलब है कि आपको इसके बारे में चिंता करने की ज़रूरत नहीं है। यदि आप रीबेज करते हैं तो जटिल संघर्षों को हल करने की वास्तविकता आसान हो जाती है, फिर क्रम में नए बदलावों को मर्ज करें।

आप Bunny Hopping

+1

मेरे अनुभव में यह सच नहीं हुआ है। जब आप रीबेस का उपयोग करते हैं तो बाद में विलय करना आसान हो सकता है, लेकिन यह एक दुःस्वप्न * अब * है क्योंकि एक ही रिबेस में कई संघर्ष उत्पन्न होते हैं। अक्सर एक ही फाइल से। सीधे-ऊपर विलय करने के लिए स्विचिंग ने सभी के लिए छोटी और लंबी अवधि दोनों में इसे अधिक सरल बना दिया है। – Joe

+0

विवाद एक संघर्ष में उत्पन्न नहीं होते हैं क्योंकि आप विवादित प्रतिबद्धताओं को पुनर्जीवित नहीं करते हैं। – JamesRyan

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