2011-05-27 7 views
9

अगर मैंक्या गिट में ब्रांचिंग माता-पिता के रिश्ते को बनाती है?

$ git branch a 
$ git checkout a 
Switched to branch 'a' 
$ git branch b 
$ git checkout b 
Switched to branch 'b' 
$ git branch c1 
$ git branch c2 

कर इन शाखाओं के बीच किसी भी रिश्ते है, या वहाँ क्योंकि वहाँ उन्हें किसी भी प्रतिबद्ध नहीं थे कर रहे हैं सभी पर विचार किया 'फ्लैट'? SVN में, मैं इस तरह इन शाखाओं मॉडल होगा:

master 
| 
+-a 
    | 
    +-b 
    | 
    +-c1 
    | 
    +-c2 

हालांकि, जब मैं this question का पालन करें और gitk master a b c1 c2 करने की कोशिश, मैं एक फ्लैट लाइन मिलता है, नहीं आरेख मैं ऊपर डाल दिया।

उत्तर

10

गिट में सख्त मूल शाखा नहीं है, यह केवल एक विशेष प्रतिबद्धता पथ है। इस मामले में, वे सभी अपने शुरुआती बिंदु के समान प्रतिबद्ध हैं, इसलिए वे सभी एक जैसे हैं। जैसे ही वे अपनी खुद की प्रतिबद्धता शुरू करते हैं, वे अपनी "रेखाएं" बनेंगे, लेकिन वे वास्तव में एक-दूसरे से संबंध नहीं बनाएंगे।

किसी भी समय आप शाखा git merge का उपयोग करके आसानी से विलय कर सकते हैं, इसलिए "मूल" संबंध मौलिक नहीं है। गिट में --track (जहां आप अपने माता-पिता को प्राप्त करते हैं) का उपयोग करने के मामले में माता-पिता की अवधारणा होती है, लेकिन यह केवल एक विशेष सुविधा कार्य है। यदि आप अपना I करते हैं और अपने टी (git merge branch A, git merge branch B, आदि) को पार करते हैं तो आप आसानी से "माता-पिता" की संख्या प्राप्त कर सकते हैं।

0

मेरा मानना ​​है कि यदि आप --no-ff के साथ विलय करते हैं तो यह परिवर्तनों को तेज़ी से आगे नहीं बढ़ाएगा और आपके पास एक वृक्ष इतिहास होगा जैसा कि यह बनाया गया था।

4

मेरे लिए शाखाओं के बारे में सोचने में मददगार है। आप मास्टर नामक पॉइंटर से शुरुआत कर रहे हैं जो किसी विशेष प्रतिबद्धता पर इंगित करता है। जब आप कोई शाखा बनाते हैं, तो आप एक और संकेतक बना रहे हैं जो एक ही प्रतिबद्धता पर इंगित कर रहा है। तो आपके ऊपर दिए गए आदेशों का सेट 5 पॉइंटर्स (मास्टर, ए, बी, सी 1, सी 2) में परिणाम देता है जो सभी एक ही प्रतिबद्धता पर इंगित कर रहे हैं।

1

शाखाओं के बीच कोई संबंध नहीं है।

यह निर्देश:

cat .git/HEAD > .git/branch/ref/heads/c1 

तो जब एक शाखा बनाते समय, आप केवल शाखा का नाम और पहचान प्रतिबद्ध के बीच मुख्य-मान संबंध सेट कर रहे हैं:

git branch c1 

के बराबर है इसके एसएचए 1 द्वारा।

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