2010-02-04 17 views
6

पर शाखा (विषय) काम करता है/विलय हो रहा है नोट: मुझे यकीन नहीं है कि यह पहले से ही पूछा गया है, क्योंकि मुझे मेरे संदर्भ में कोई प्रश्न नहीं मिल रहा है (या मैं मौजूदा प्रश्नों के संदर्भों को समझने में असमर्थ हूं 0)गिट: यह समझने में असमर्थ क्यों मास्टर शाखा

मैं इन दिनों गिट से प्यार करता हूं। विशेष रूप से, विषय शाखाओं। मैं एक छोटे कोड साझा करने के आवेदन पर काम कर रहा हूं। और मुझे "मास्टर", "प्रमाणीकरण", "बुकमार्क्स", "टिप्पणियां", "नाक" आदि ...

मेरा (इरादा) वर्कफ़्लो इस तरह कुछ चला गया है: एक विषय शाखा बनाएं ==> विषय शाखा पर कार्य करें ==> शाखाओं को शाखाओं में प्रतिबद्ध करें ==> विषय शाखा परिवर्तन को "मास्टर" शाखा में मर्ज करें। (और बाद में विषय शाखा हटाएं)

मैंने कुछ शाखाओं के लिए ऐसा करने की कोशिश की। यह ठीक काम किया। लेकिन बाद में जब मैंने गिट ग्राफ की जांच की, भले ही मैंने एक ही वर्कफ़्लो का पालन किया, तो "मास्टर" पर सभी संभावनाएं हो रही थीं। कोई वृक्ष रेखाएं अलग हो रही हैं और अभिसरण नहीं! यह तब से एक सिंगल लाइन के साथ एक सिंगल लाइन दिखाता है। मुझे यकीन नहीं है क्यों? मैं इंप्रेशन का हूँ, मैंने हेड पॉइंटर के साथ कुछ खराब कर दिया?

एक व्यावहारिक दृश्य देने के लिए, यहाँ मेरी Git ग्राफ है: http://github.com/none-da/zeshare/network

यहाँ आदेशों मैं प्रयोग किया जाता हैं:

>> git branch authentication_feature 
>> git checkout authentication_feature 
>> # I work with all the files here in "authentication_feature" branch 
>> git commit -m "Authentication_feature is up" # commiting to the branch 
>> git branch # just to confirm, which branch I am working on 
>> git checkout master # trying to shift to master branch 
>> git merge --no-commit authentication_feature # I merge in two steps. This is step 1 
>> git status;git add; git commit -m "Authentication_feature" merged to "master". # This is the step 2 
>> git log --graph --pretty=oneline # confirming the graph 
>> git push origin master # pushing to the remote server(github) 
+0

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

+0

मुझे डर है कि उत्तर के लिए पर्याप्त विवरण नहीं है (लिंक समय भी बाहर है), सुनिश्चित करें कि आप किसी भी ट्यूटोरियल/मैनुअल का पालन करें और देखें कि आपको एक ही परिणाम मिलते हैं या नहीं। उस शाखा की जांच करें जिस पर आप परिवर्तन कर रहे हैं और इसी तरह। – stefanB

उत्तर

5

लेकिन बाद में जब मैं Git ग्राफ जाँच की है, भले ही मैं एक ही कार्यप्रवाह पीछा किया, सभी संभावना पर हो रहा गया: यह अब तक मेरे लिए काम किया जा रहा है (मैं धक्का आदेश डाला) "मास्टर"।कोई वृक्ष रेखाएं अलग हो रही हैं और अभिसरण नहीं!

अच्छा ... मुझे आपकी कुछ शाखाएं और विलय दिखाई देता है।

आप इस page all the possible merge scenarios
में मिलेगा (समय में संकलित - 2007 के अंत - अभी योगदानकर्ता द्वारा: Jakub Narębski)

आप तेजी से आगे मामला है, जो स्पष्टीकरण दें कि आपके मर्ज किए गए भाग कर देगा होगा में हो सकता है एक बार पूरा होने के बाद आपके सभी काम मास्टर पर दिखाई देते हैं:

2/फास्ट फॉरवर्ड केस; वहाँ कोई ए, बी, सी करता है, और हम निम्न स्थिति से शुरू :

1---2---3    <-- trunk <-- HEAD 
      \ 
      \-a---b---c <-- branch 

2,1/"git merge branch"

1---2---3   /----- trunk <-- HEAD 
      \   v 
      \-a---b---c <-- branch 

में तेजी से आगे परिणाम बस ट्रंक के सिर को ले जा रहा है। क्योंकि फ़ास्ट-फ़ॉरवर्ड एक प्रतिबद्ध पैदा नहीं करता 2.1 में

2.2/"git merge --no-commit branch"

की तरह,:
यह एक बनाने नहीं करता है प्रतिबद्ध है, इसलिए।

तो अगर आप गुरु पर नहीं की जब से तुम बाहर branched, और फिर मास्टर पर किसी मर्ज करना, तुम सब नहीं करने के लिए मास्टर प्रमुख को रीसेट है ...


शाखाओं के लिए एक अन्य कारण प्रदर्शित किया "प्रभाव सूची टू-डू" presentation page of the GitHub Network Graph visualizer पर वर्णित है (जो "Git ग्राफ" है तुम यहाँ की बात कर रहे)

लेकिन आप देख रहे हैं प्रत्येक केवल एक बार के लिए प्रतिबद्ध। इसे एक सेकंड के लिए डुबो दें।
मुझे लगता है कि कई कोडर को केंद्रीकृत एससीएम में इतना उपयोग किया जाता है कि वे इस तथ्य को याद करते हैं कि हमारा ग्राफ विजुअलाइज़र वास्तव में अलग-अलग भंडारों को दिखा रहा है और जोड़ रहा है।

यदि मैं अपने साथ ग्राफ के रूप में ग्राफ खींचता हूं, तो ग्राफ कोड की एक प्रकार की टू-डू सूची दिखाता है जिसे मैंने अभी तक अपने रेपो में नहीं खींचा है।
जब मैं अपने रेपो के अपने फोर्क्स में समुदाय क्या कर रहा हूं, इस पर पकड़ना चाहता हूं, तो मैं ग्राफ को हिट कर सकता हूं और तुरंत देख सकता हूं कि अन्य लोग क्या कर रहे हैं।
अगर मैं बर्टग के परिवर्तनों को खींचूं, अगली बार जब मैं ग्राफ देखूं, तो बर्टग अब बिल्कुल नहीं दिखाए जाएंगे क्योंकि अब उनके पास ऐसा कोई काम नहीं होगा जो मैं नहीं करता हूं।
सूची करने के लिए सोचते रहें और आप ग्राफ को समझेंगे।

तो यदि यह अन्य रिपोज शाखाओं से विलय के लिए सच है (यानी।जब आप विलय हो जाते हैं तो आप उन शाखाओं को और नहीं देखते हैं), से आपकी खुद की रेपो शाखाओं में विलय के लिए यह सच हो सकता है: एक बार विलय हो जाने पर, आप उन्हें अपने ग्राफ में और नहीं देखते हैं।

लेकिन मैं करते हैं, क्योंकि:

  • मैं नहीं परियोजना के मालिक हूँ।
  • मैं आपकी किसी भी शाखा से अपने रेपो परिवर्तनों को खींचना चाहता हूं।
+0

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

+0

@ मैडी: "गिट मर्ज - नो-प्रतिबद्ध" यहां कोई कारण नहीं है, यदि आप फास्ट फॉरवर्ड विलय परिदृश्य में हैं। मेरा संपादित उत्तर देखें। – VonC

+0

'गिट मर्ज - नो-प्रतिबद्ध': '--no- प्रतिबद्ध करें 'मर्ज करें लेकिन विलय का नाटक नाटक करें और ऑटोोकॉमिट न करें, उपयोगकर्ता को निरीक्षण करने और टी को ट्विक करने का मौका देने के लिए वह काम करने से पहले परिणाम मर्ज करें। - तो इसका मतलब है कि कोड विलय हो गया है लेकिन यह गिट में रिकॉर्डर नहीं है, इसलिए आपको ग्राफ में कोई विलय दिखाई नहीं देगा, सही? – stefanB

0

आप नहीं कहा क्या आज्ञा देता है कि आप वास्तव में इस्तेमाल किया, लेकिन मेरा अनुमान है कि है आपने अपनी शाखा git branch के साथ बनाई है लेकिन शाखा में जाने के लिए इसे जांच नहीं लिया है। आप इसे एक चरण में निम्नानुसार कर सकते हैं:

git checkout master -b topic22 

इससे कम संभावना है कि आप अनजाने में मास्टर के लिए प्रतिबद्ध होंगे।

अब आपने आदेशों का अनुक्रम जोड़ा है, मैंने देखा है कि आपने शाखा को चेकआउट किया था।

कमांड अनुक्रम ठीक दिखता है। मुझे लगता है कि ऐसा लगता है कि कोई शाखा नहीं थी क्योंकि मास्टर शाखा पर कोई हस्तक्षेप नहीं किया गया था। विलय के बाद, यह अनुक्रमिक विकास प्रवाह की तरह दिखता है। यह अन्य उत्तरों में से एक में अच्छी तरह से चर्चा की गई है, इसलिए यहां विस्तृत करने की आवश्यकता नहीं है।

+0

@Jamey, मैंने अपने प्रश्नों को मेरे द्वारा उपयोग किए गए आदेशों के साथ अपडेट किया। कृपया सलाह दें कि समस्या कहां है। –

+0

मुझे हमेशा एक दिलचस्प विशेषता होने के लिए विषय 22 मिला। – theIV

0

आप

git show-branch 

की तरह कुछ का उपयोग कर रहे आप शाखाओं दिखाने के लिए और-इन जाँच करने के लिए, एक बार आप में महारत हासिल करने तुम्हें अब संशोधन नहीं देख सकते हैं अपने शाखाओं का विलय कर दिया - यकीन नहीं क्यों।

मुझे व्यवहार के बारे में कोई स्पष्टीकरण नहीं मिल रहा है लेकिन git log के बाद से गिट रिपॉजिटरी के साथ कोई समस्या नहीं प्रतीत होती है, सभी दिखाता है कि प्रत्येक शाखा के लिए सभी काम करता है।

तो मुझे लगता है कि उपकरण शाखा ग्राफ को प्रदर्शित करने का तरीका है।

+0

@stefanB, मैंने अपने प्रश्नों को मेरे द्वारा उपयोग किए गए आदेशों के साथ अपडेट किया। कृपया सलाह दें कि समस्या कहां है। –

+0

@stefanB, लेकिन github नेटवर्क ग्राफ को प्रतिबिंबित करना चाहिए कि मैं कैसे प्रतिबद्ध हूं और कोई विलय नहीं करता? मुझे यकीन है कि मैं आदेशों का उपयोग करने के तरीके में कुछ गड़बड़ कर रहा हूं! –

0

मैं खुद को गिट और गिटब के लिए नया ब्रांड हूं (और लिंक अभी भी नीचे है), लेकिन आपके कदमों को देखने के बाद, क्या ऐसा हो सकता है क्योंकि आपने वास्तविक शाखा को जिथब में धक्का नहीं दिया था?

... 
>> git commit -m "Authentication_feature is up" # commiting to the branch 
>> git branch # just to confirm, which branch I am working on 
>> git push origin authentication_feature # push the branch to github 
>> git checkout master # trying to shift to master branch 
... 
+0

@ क्रिस, आपने शाखा को रिमोट एड्रेस पर धक्का दिया, जो ठीक है, लेकिन मास्टर के साथ विलय नहीं हुआ! और यदि आप नेटवर्क ग्राफ़ लिंक (यदि गिटब अब तक ऊपर है) की जांच करते हैं, तो मैंने जिस दृष्टिकोण का उल्लेख किया है, वह पहले ही विकास के विभिन्न लाइनों (ग्राफ लाइन) बनाता है। यह अब केवल नहीं कर रहा है: '(मैं रास्ते से गिट करने के लिए भी नया हूं। –

+0

फिर: मास्टर में विलय करें - मैंने अन्य कदमों को काट दिया ("...") –

7

मुझे लगता है कि आप --no-ffgit merge पर स्विच कर रहे हैं। डिफ़ॉल्ट रूप से, merge कोई हस्तक्षेप करने की प्रतिबद्धता नहीं है, तो नई शाखा की नोक पर HEAD अपडेट करें।

यदि आप अपने कामों को समूहबद्ध करने में सहायता के लिए विलय प्रतिबद्धता छोड़ना चाहते हैं, तो --no-ff पास करें।

+0

मैंने इसका उपयोग शुरू किया और मैं इसे कभी नहीं छोड़ूंगा। –

0

git merge --no-ff उपयोग का एक विकल्प के रूप में:

आप मुख्य शाखा के विषय शाखा विकास के प्रभाव को प्रतिबद्ध करने के लिए चाहते हैं, लेकिन व्यक्तिगत के सभी करता है, तो आप git merge --squash उपयोग कर सकते हैं। जब आप ऐसा करते हैं तो प्रतिबद्धता को मर्ज के रूप में चिह्नित नहीं किया जाता है और उसके पास विषय शाखा का दूसरा पैरेंट नहीं होता है। व्यक्तिगत प्रतिबद्धताओं की सूची स्क्वैश विलय के लिए प्रतिबद्ध टिप्पणी में शामिल की गई है, क्योंकि उन्हें git log द्वारा सूचीबद्ध किया जाएगा।

हम इस परियोजना का उपयोग एसवीएन से जुड़े हैं (git svn द्वारा), ताकि हमारी मुख्य शाखा में एक रैखिक इतिहास हो। इस तरह, हमें git svn dcommit चलाने से पहले गिट प्रतिबद्ध ग्राफ को फ़्लैट करना नहीं है।

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