मास्टर के साथ सिंक शाखा कैसे रखें


275

फिलहाल git मेरा सिर कर रहा है, मैं निम्नलिखित के लिए सबसे अच्छा समाधान के साथ नहीं आ सकता।

इसकी दो शाखाएँ हैं, एक जिन्हें मास्टर कहा जाता है और एक को मोबिलाइडेविस्पोर्ट कहा जाता है । मैं मोबिल्डेविसपोर्ट को एक सतत शाखा के रूप में रखना चाहता हूं जिसे जब भी मोबिलाइवेसुपोर्ट स्थिर होगा, मास्टर शाखा के साथ विलय / सिंक किया जाएगा। यह जुटे हुए मोबाइल से मास्टर में परिवर्तन को मर्ज करेगा, लेकिन मास्टर से सभी बदलाव को मोबिलाइसेवसुपोर्ट में लाएगा ताकि शाखा पर काम किया जा सके और सुविधाओं में सुधार या संशोधन हो सके। इसके लिए एक केंद्रीय भंडार और कई डेवलपर्स के साथ काम करने की जरूरत है।

कृपया अन्य लोगों द्वारा उपयोग किए जाने वाले समान वर्कफ़्लोज़ का एक उदाहरण या मुझे यह बताएं कि क्या यह विचार बेवकूफ़ है और मुझे अन्य विकल्पों पर विचार करना चाहिए। फिलहाल वर्कफ़्लो ध्वनि लगता है, लेकिन मुझे नहीं पता कि मैं इस तरह से काम कैसे कर सकता हूं।

धन्यवाद, सब बहुत सराहना की मदद।

अद्यतन 1: अगर मुझे मास्टर को मोबिलाइसेवसुपोर्ट में विलय करना था और मास्टर के समर्थन में जुटाया गया था, तो क्या मुझे दोनों शाखाओं में दोहराया गया है। या यह समझने के लिए पर्याप्त स्मार्ट है कि मैंने शाखा ए में शाखा बी से नवीनतम परिवर्तन खींच लिया है और शाखा बी में मर्ज कमिट सी को जोड़ दिया है और मैंने शाखा बी से नवीनतम परिवर्तनों को शाखा ए में जोड़ दिया है और विलय कमेटी को शाखा में जोड़ दिया है। ए?

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

master
A--B--C-----H--I--J--M--N
       \   /    \
mobile  \ /      \
D--E--F--G--------K--L

1
यदि आप, मेरी तरह, GitHub ग्राहक के साथ यह करने के लिए देख रहे हैं : help.github.com/articles/merging-branches
cregox

1
इस सवाल ने सदियों तक मेरी जान बचाई; इस अद्भुत सवाल @Mr सेट करने के लिए समय निकालने में महान प्रयास के लिए धन्यवाद। EZEKIEL
डीजेफी

यदि आप एक कांटा पर काम कर रहे हैं, तो आपको help.github.com/articles/syncing-a-fork
koppor

जवाबों:


416

हाँ बस करो

git checkout master
git pull
git checkout mobiledevicesupport
git merge master

मास्टर के साथ समन्वय में जुटाए रखने के लिए

फिर जब आप मास्टर में जुटे हुए मोबाइल को रखने के लिए तैयार हों, तो पहले ऊपर की तरह मास्टर में विलय करें, फिर ...

git checkout master
git merge mobiledevicesupport
git push origin master

और बस।

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


यह मेरे लिए उचित लगता है, मुझे लगता है मुझे यकीन नहीं है कि यह कितना गंदा इतिहास बना देगा, मैं अपने प्रश्न को एक उदाहरण के साथ अपडेट करूंगा जो मुझे लगता है कि होगा।
श्री EZEKIEL

1
आपके पास काफी कुछ "मर्ज कमिट्स" होगा, अनिवार्य रूप से अपनी शाखाओं के बीच मतभेदों को सुलझाने की कोशिश कर रहा है। यदि आप इसके बारे में चिंतित हैं और आप केवल शाखा का उपयोग कर रहे हैं, तो एक "गिट मर्ज मास्टर" के बजाय "गिट रीज़ेस मास्टर" करें और रिमॉट ब्रांच को कमिट न करें। यदि आप ऐसा करने के लिए जा रहे हैं तो अपने आप को बहुत सारे बल पुश (git push --force) के लिए मूल / mobiledevicesupport पर करने जा रहे हैं क्योंकि आप (शायद) हमेशा इसे भेजने का इतिहास बना रहे हैं जो मेल नहीं खाता दूरस्थ शाखा है। अधिक विस्तार से यहाँ git-scm.com/book/en/Git-Branching-Rebasing
concept47

मेरा मानना ​​है कि यह सही उत्तर है, यह बिल्कुल वैसा ही लगता है जैसा मैं चाहता हूं। मैंने इसे थोड़ा और स्पष्ट करने के लिए ऊपर एक चित्रण जोड़ा, लेकिन अगर आप जो कह रहे हैं वह सच है, तो यह ठीक उसी तरह से काम करना चाहिए जैसा मैं चाहता हूं। धन्यवाद।
श्री EZEKIEL

2
यह समझने के लिए इसे पढ़ें कि यह विशेष रूप से अच्छी सलाह क्यों नहीं है: kentnguyen.com/development/visualized-git-practices-for-team/… । यह गिट अनुचर द्वारा लिखा गया था, इसलिए यह कहना उचित होगा कि वह जानता है कि वह इस विशेष विषय के संबंध में क्या बात कर रहा है।
दान मोल्डिंग

2
यह कमिटेड हिस्ट्री गड़बड़ हो जाती है, देखिए मेरा जवाब इसे रिबास के माध्यम से करते हैं।
Gob00st

43

जब भी आप अपनी कार्य शाखा में मास्टर से परिवर्तन प्राप्त करना चाहते हैं, तो करें git rebase <remote>/master। अगर कोई टकराव हो। उन्हें हल करें।

जब आपकी कार्य शाखा तैयार हो जाए, तो फिर से रिबास करें और फिर करें git push <remote> HEAD:master। यह रिमोट (सेंट्रल रेपो) पर मास्टर शाखा को अपडेट करेगा।


3
स्वीकार किए गए उत्तर में इसके बजाय इस तरह से करने के पक्ष / विपक्ष क्या है?
हम्पस अह्लग्रेन

33
साने जब तक आप 5 घंटे
रिबास

21
यह तभी सत्य है जब आपकी शाखा एक निजी भंडार पर हो। कभी भी किसी ऐसी चीज का खंडन न करें, जिसे ऊपर की ओर धकेला गया हो। यही कारण है कि: git-scm.com/book/en/v2/…
Kleag

3
इतिहास को फिर से लिखने के साथ रिबासिंग करने में समस्या यह है कि विद्रोही प्रतिबद्ध एसएचए को बदल दिया जाता है और इस प्रकार आप (जैसे) के आउटपुट पर भरोसा नहीं कर सकते git branch --contains <commit>
jnns

13

concept47 का दृष्टिकोण इसे करने का सही तरीका है, लेकिन मैं आपके प्रतिबद्ध इतिहास को स्पष्ट रखने के लिए --no-ff विकल्प के साथ विलय करने की सलाह दूंगा।

git checkout develop
git pull --rebase
git checkout NewFeatureBranch
git merge --no-ff master

9

हाँ, मैं आपके दृष्टिकोण से सहमत हूँ। गुरु के रूप में जुटाए गए मोबाइल को आप उपयोग कर सकते हैं

git checkout master
git pull origin master //Get all latest commits of master branch
git merge mobiledevicesupport

इसी प्रकार आप मास्टर को मोबिलाइसेवसुपोर्ट में मर्ज भी कर सकते हैं।

Q. अगर क्रॉस मर्जिंग एक इश्यू है या नहीं।

A. खैर यह मोबाइल पर * शाखा और मास्टर ब्रांच में किए गए कमिट पर निर्भर करता है जब पिछली बार उन्हें सिंक किया गया था। इस उदाहरण को लें: अंतिम सिंक के बाद, इन ब्रांचों के बाद कमिट्स होते हैं

Master branch: A -> B -> C [where A,B,C are commits]
Mobile branch: D -> E

अब, मान लें कि बी ने a.txt फाइल करने के लिए कुछ बदलाव किए हैं और D ने भी a.txt में कुछ बदलाव किए हैं। आइए अब विलय के प्रत्येक ऑपरेशन के प्रभाव पर एक नजर डालते हैं,

git checkout master //Switches to master branch
git pull // Get the commits you don't have. May be your fellow workers have made them.
git merge mobiledevicesupport // It will try to add D and E in master branch.

अब, दो प्रकार के विलय संभव हैं

  1. तेजी से आगे विलय
  2. सही मर्ज (मैन्युअल प्रयास की आवश्यकता है)

Git पहले FF को मर्ज करने की कोशिश करेगा और अगर यह पाता है कि कोई संघर्ष git द्वारा resolvable नहीं हैं। यह मर्ज को विफल करता है और आपको मर्ज करने के लिए कहता है। इस स्थिति में, एक नई कमिट आएगी जो a.txt में संघर्षों को हल करने के लिए जिम्मेदार है।

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


1
तो इस तरह से मर्ज करना कोई समस्या नहीं है?
श्री EZEKIEL

क्रॉस मर्जिंग है जिसे हम सिंकिंग कहते हैं और यह एक मुद्दा नहीं है जब तक कि दोनों शाखाओं में कमिट कोई संघर्ष नहीं करता है। कृपया मेरा अद्यतन उत्तर देखें।
sachinjain024

3

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

git fetchअपनी सुविधा शाखा से 1 (सुनिश्चित करें कि जिस सुविधा शाखा पर आप काम कर रहे हैं, वह अद्यतन है)

2 git rebase origin/develop

3 यदि कोई संघर्ष उत्पन्न होता है, तो उन्हें एक-एक करके हल करें

git rebase --continueएक बार सभी संघर्षों से निपटने के लिए 4 का उपयोग करें

5 git push --force


1
यह पढ़ना मुश्किल है और समझना मुश्किल है। कृपया अपने उत्तर को अपडेट करें और कमांड से अपनी टिप्पणी को अलग करने के लिए, उचित कोड मार्कडाउन का उपयोग करें।
8

2

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.