गिट - क्या यह अन्य लोगों के साथ शाखाओं पर काम करते समय खींच या पुनर्जीवित है

इसलिए यदि मैं उन शाखाओं का उपयोग कर रहा हूं जो दूरस्थ (ट्रैक की गई) शाखाएं हैं, और मैं सबसे आखिरी बार प्राप्त करना चाहता हूं, तो मुझे अभी भी अस्पष्ट नहीं है कि मुझे git pull या git rebase </कोड>। मैंने सोचा था कि मैंने पढ़ा था कि git rebase कर रहे हैं जब अन्य उपयोगकर्ताओं के साथ एक शाखा पर काम करते हैं, तो जब वे खींचते हैं या रीबेस करते हैं तो यह उन्हें पेंच कर सकता है। क्या यह सच है? क्या हम सभी git pull का उपयोग कर रहे हैं?

0

5 उत्तर

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

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

0
जोड़ा

गिट <�कोड> रीबेस इतिहास का पुनः लिखना है। आपको उन शाखाओं पर कभी ऐसा नहीं करना चाहिए जो "सार्वजनिक" हैं (यानी, शाखाएं जिन्हें आप दूसरों के साथ साझा करते हैं)। अगर कोई आपकी शाखा को क्लोन करता है और फिर आप उस शाखा को फिर से दबाते हैं - तो वे अब आपकी शाखा से परिवर्तनों को खींच/विलय नहीं कर सकते हैं - उन्हें अपने पुराने को दूर फेंकना होगा और फिर से खींचना होगा।

गिट के साथ पैकेजिंग सॉफ़्टवेयर पर यह लेख एक बहुत ही सार्थक पढ़ा गया है। यह सॉफ्टवेयर वितरण के प्रबंधन के बारे में अधिक है लेकिन यह काफी तकनीकी है और इस बारे में बात करता है कि शाखाओं का उपयोग कैसे किया जा सकता है/प्रबंधित/साझा किया जा सकता है। वे कब रिबेज करते हैं और कब खींचते हैं और प्रत्येक के विभिन्न परिणामों के बारे में बात करते हैं।

संक्षेप में, दोनों के पास उनकी जगह है लेकिन आपको वास्तव में अंतर को कम करने की आवश्यकता है।

0
जोड़ा
संक्षेप में, अन्य रिपॉजिटरीज़ में रहने वाले किसी भी काम को दोबारा न दें।
जोड़ा लेखक Ikke, स्रोत
समस्या यह है कि अगर कोई और उस शाखा से खींचता है जिसे आप फिर से दबाते हैं। यह ठीक है अगर मैं से local में खींचता हूं तो स्थानीय को पुन: दबाता हूं, और कोई अन्य से खींचता है। अगर मैं से खींचता हूं तो यह ठीक नहीं है, कोई और स्थानीय से खींचता है, फिर मैं स्थानीय को पुन: दबाता हूं।
जोड़ा लेखक Cameron Skinner, स्रोत
क्या यह सच है, @Pat? पुल --rebase के मामले में, क्या आप अपने स्थानीय कामों को फिर से ऑर्डर नहीं कर रहे हैं जो आपने खींचा है? चूंकि वे स्थानीय काम करते थे, और अभी तक प्रकाशित नहीं हुए थे, इसलिए वे किसी ऐसे व्यक्ति को कैसे तोड़ेंगे जो pull --rebase 'ed के बाद खींचने का प्रयास करता है?
जोड़ा लेखक Gabe Hollombe, स्रोत

git pull does a merge if you've got commits that aren't in the remote branch. git rebase rewrites any existing commits you have to be relative to the tip of the remote branch. They're similar in that they can both cause conflicts, but I think using git rebase if you can allows for smoother collaboration. During the rebase operation you can refine your commits so they look like they were newly applied to the latest revision of the remote branch. A merge is perhaps more appropriate for longer development cycles on a branch that have more history.

गिट में अधिकांश अन्य चीजों की तरह, काम करने की विभिन्न शैलियों को समायोजित करने के लिए बहुत अधिक ओवरलैपिंग कार्यक्षमता है।

0
जोड़ा

गिट पुल 2 कमांड का संयोजन है

  • गिट फ़ेच (रिमोट पर नवीनतम सामग्री के साथ आपके स्थानीय रेपो को सिंक करता है)
  • गिट मर्ज (दूरस्थ शाखा से परिवर्तनों को विलय करता है, यदि कोई हो, तो आपकी स्थानीय ट्रैकिंग शाखा में)

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

इसका उद्देश्य मुख्य रूप से आपको क्लीनर इतिहास देने देना है। पिछले इतिहास से पहले कई लोगों द्वारा कई विलय नहीं होते हैं, गिटक में बहुत ही स्पेगेटी जैसी होती है।

सबसे अच्छा ग्राफिकल स्पष्टीकरण पहले 2 ग्राफिक्स यहां । लेकिन मुझे यहां एक उदाहरण के साथ समझाओ।

मेरे पास 2 शाखाएं हैं: मास्टर और माइब्रैंच। जब मेरी ब्रैंच पर खड़ा होता है तो मैं दौड़ सकता हूं

git rebase master

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

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

git rebase mybranch

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

खैर, शब्दों में बस व्याख्या करना थोड़ा मुश्किल है ... उम्मीद है कि यह थोड़ा सा समझ में आता है :-)

वैसे भी, मेरा अपना वर्कफ़्लो यह है:

  • 'गिट खींचें' रिमोट से नए बदलाव
  • mybranch पर स्विच करें
  • मेरे प्रतिबद्ध इतिहास में मास्टर के नए बदलाव लाने के लिए
  • 'गिट रीबेस मास्टर'
  • मास्टर पर वापस स्विच करें
  • 'गिट मर्जब्रैज मर्ज करें', जो केवल फास्ट-फॉरवर्ड होता है जब मास्टर में सब कुछ माइब्रैंच में भी होता है (इस प्रकार सार्वजनिक शाखा पर प्रतिबद्ध रीडरिंग समस्या से परहेज करता है)
  • 'गिट पुश'

एक आखिरी शब्द मतभेद छोटे होते हैं (उदाहरण के लिए अलग-अलग फाइलों या कम से कम अलग-अलग लाइनों पर काम करने वाले लोग) जब मैं दृढ़ता से उपयोग करने की सलाह देता हूं। इसमें गोचाचा है कि मैंने वहां बस व्याख्या करने की कोशिश की, लेकिन यह एक बहुत साफ इतिहास बनाता है।

जैसे ही महत्वपूर्ण संघर्ष हो सकते हैं (उदाहरण के लिए एक सहकर्मी ने फाइलों के समूह में कुछ नाम बदल दिया है), मैं दृढ़ता से विलय की अनुशंसा करता हूं। इस मामले में, आप संघर्ष को हल करने के लिए कहा जाएगा और फिर संकल्प प्रतिबद्ध करेंगे। प्लस तरफ, विवाद होने पर हल करने के लिए एक मर्ज बहुत आसान है। नीचे की तरफ यह है कि यदि आपका बहुत से लोग विलय करते हैं तो आपका इतिहास पालन करना मुश्किल हो सकता है :-)

सौभाग्य!

0
जोड़ा
ऐसा लगता है कि आपको यह कहना चाहिए था कि: 'गिट विलय mybranch', जो केवल तेज़-आगे होता है जब मास्टर में सबकुछ भी मेरे ब्रैंच में होता है (इस प्रकार सार्वजनिक शाखा पर प्रतिबद्धता की समस्या से बचने के लिए)
जोड़ा लेखक Bruno Bronosky, स्रोत
'गिट रीबेज माइब्रैंच' को निश्चित रूप से 'गिट मर्ज माइब्रैंच' पढ़ना चाहिए।
जोड़ा लेखक James H, स्रोत

ब्रांचिंग और विलय के रूप में उत्कृष्ट गिटकास्ट देखें साथ ही rebasing के रूप में।

0
जोड़ा