2011-09-01 10 views
20

मर्ज करने के बाद इतिहास शुरू करता है मैं एक परियोजना (अकेले) पर काम कर रहा हूं और प्रत्येक सुविधा के लिए मैं विकसित हूं, मैं एक नई शाखा बनाता हूं, इस सुविधा पर काम करता हूं, फिर इसे मास्टर में विलय करता हूं। तो आम तौर पर मैं कभी भी एक ही समय में दो अलग-अलग शाखाओं पर काम नहीं करता और शाखा पर काम करते समय कभी भी मास्टर को स्पर्श नहीं करता।गिट शाखाएं और

जब मैं एक शाखा विलय करता हूं तो मुझे लगता है कि (gitx और gitk का उपयोग करके) मास्टर शाखा का इतिहास मर्ज किए गए शाखा में किए गए सभी कामों को प्राप्त करता है। मेरा मतलब है अगर मैं कुछ इस तरह है: मर्ज के बाद

master a-b-c-d 
       \z-x-y-- 
       |branch name 

मैं:

a-b-c-d-z-x-y 
      |branch name 

हाँ, मैं देख रहा हूँ मर्ज किए गए शाखा का नाम (gitx और gitk का उपयोग) पर प्रकाश डाला है, लेकिन क्या मैं उम्मीद कर रहा था कुछ है वास्तव में दिखा जहां प्रतिबद्ध किया जाता है की तरह (जो शाखा के लिए):

master a-b-c-d--------M-- 
       \-z-x-y-/ 
       |branch name 

तो मैं देखने के लिए एक प्रतिबद्ध "एम" मर्ज मैं स्वामी के पास किया है का प्रतिनिधित्व करता है उम्मीद कर रहा हूँ, कोई ऐसा लगता है कि मैंने नई शाखा में किए गए सभी कामों को मास्टर करने के लिए किया है।

क्या मेरी उम्मीद सही है? या यह सामान्य git व्यवहार है?

उत्तर

29

यह सामान्य गिट व्यवहार है। आप "फास्ट-फॉरवर्ड" विलय कहला रहे हैं, क्योंकि आपकी शाखा master शाखा से सख्ती से आगे है।

यदि आप वास्तव में शाखा इतिहास को संरक्षित करना चाहते हैं (हालांकि मैं आपको परेशान नहीं करता) तो आप git merge --no-ff का उपयोग कर इसे मर्ज करने के लिए मजबूर कर सकते हैं, भले ही यह एक तेज़-आगे अपडेट कर सके।

+5

सुविधा शाखाओं में विलय करते समय '--no-ff' का उपयोग करने के कुछ लाभ हैं। मुख्य बात यह है कि यह फीचर आउट करने के लिए एक शॉट है। –

+0

इस सहायक जानकारी के लिए बहुत धन्यवाद। @ कैमरून क्या आप कृपया समझा सकते हैं कि ऐसा करने की अनुशंसा क्यों नहीं की जाती है? और क्या मैं अपने सभी पुराने विलयों को "पुनर्स्थापित" कर सकता हूं? (मूल रूप से क्योंकि मुझे अपनी परियोजना के बारे में एक रिपोर्ट लिखनी है, इसलिए मेरी शाखाओं के स्क्रीनशॉट सहायक होंगे) – Ansd

+2

@ एएनएस: मैं इसकी अनुशंसा नहीं करता क्योंकि मुझे इसके लिए कभी भी इसका उपयोग नहीं मिला है। मैं 'मास्टर' इतिहास को यथासंभव सरल और रैखिक रखना पसंद करता हूं, और इसे किसी फीचर शाखा के बारे में ध्यान देने के लिए कभी भी आवश्यकता नहीं होती है। इसे एक-शॉट रिवर्ट के बारे में डैन रे का बिंदु मान्य है, हालांकि, यह 'नो-एफएफ' का उपयोग करने का एक अच्छा कारण हो सकता है। आप शायद अपने शाखा इतिहास को आसानी से पुन: उत्पन्न नहीं कर पाएंगे, हालांकि यदि आपके पास अभी भी सभी पुरानी शाखाएं हैं तो आप मैन्युअल रूप से ऐसी शाखा उत्पन्न कर सकते हैं जो सभी सुविधाओं को उसी क्रम में विलय कर दे जो आपने उन्हें 'मास्टर' में विलय कर दिया हो। –

6

आप "Understanding the Git Workflow" में -no-ff विकल्प के लिए अतिरिक्त आलोचना पा सकते हैं, मुख्य रूप से क्योंकि यह git blame तोड़ देगा।
"fast forward when using pull and no-ff when pull" पर और अधिक।

जैसा कि "Why does git use fast-forward merging by default?" में बताया गया है, जब तक कि आप वास्तव में लंबे समय तक रहने वाली शाखा के बारे में बात नहीं कर रहे हैं, fast-forward merge बेहतर है।

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