2013-11-03 12 views
19

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

  1. प्रारंभिक शाखाओं और चेकआउट:, आवश्यकतानुसार

    git checkout master 
    
    git pull 
    
    git checkout my_branch 
    
    git merge master --no-ff 
    

दोहराएँ चरण 2 के लिए समय-समय पर धक्का के साथ:

git checkout master 

git pull 

git checkout -b my_branch 
  • my_branch में कुछ काम करें, तो समय-समय पर रिमोट my_branch

    फिर जब किसी मर्ज वापस के लिए तैयार:

    git checkout master 
    
    git merge my_branch --no-ff 
    

    ध्वनि ठीक?

  • उत्तर

    16

    आप अपने आदेशों को आसान बनाने में कर सकते हैं:

    1.

    git fetch 
    git checkout -b my_branch origin/master 
    

    2.

    git fetch 
    git merge origin/master 
    

    git fetch अपने रिमोट शाखाओं अद्यतन करता है, वहां आम तौर पर करने के लिए कोई जरूरत नहीं है जब आप नहीं हैं तो शाखा की एक स्थानीय प्रति इस शाखा पर काम करने की योजना बना रहा है।

    git config --global merge.ff false सेट करने के बाद आप --no-ff को छोड़ सकते हैं।

    git help config का कहना है:

    merge.ff 
         By default, Git does not create an extra merge commit when merging 
         a commit that is a descendant of the current commit. Instead, the 
         tip of the current branch is fast-forwarded. When set to false, 
         this variable tells Git to create an extra merge commit in such a 
         case (equivalent to giving the --no-ff option from the command 
         line). When set to only, only such fast-forward merges are allowed 
         (equivalent to giving the --ff-only option from the command line). 
    

    पता है कि git pull सिर्फ git fetch और git merge का एक संयोजन है रहो।

    आमतौर पर आप केवल git pull --rebase चाहते हैं जो अनिवार्य रूप से git fetch प्लस git rebase है, और एक बहुत साफ इतिहास बनाता है।

    क्या आपके "आवधिक धक्का" के लिए कोई कारण है? यदि कोई भी शाखा एक ही शाखा पर काम नहीं कर रहा है तो यह सब कुछ खत्म करने के बाद धक्का देने के लिए बिल्कुल ठीक होगा।

    +0

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

    +1

    rebases एक डबल धार तलवार हैं। एक ओर वे अक्सर अधिक स्पष्ट इतिहास का नेतृत्व करते हैं। दूसरी ओर वे मूल रूप से पुरानी सामग्री के साथ पूरी तरह से नए काम करते हैं। यदि आप अपनी प्रतिबद्धता को धक्का देते हैं, तो कोई और (सैद्धांतिक रूप से) उन लोगों पर अपने स्वयं के परिवर्तन कर सकता है। यदि आप बाद में आप को रीबेज करने का निर्णय लेते हैं, तो आप मूल रूप से पुराने कामों को अमान्य कर देते हैं और उन सभी परिवर्तनों को बनाते हैं। - यहां तक ​​कि यदि आप अपनी पुरानी शाखा को हटाते हैं, तो दूसरा कोई भी अपने परिवर्तनों को धक्का दे सकता है और इसलिए आपके पुराने परिवर्तन भी धक्का दे सकता है, जिसके परिणामस्वरूप डुप्लिकेट काम करता है और एक रिज्यूटिंग गड़बड़ी होगी। :) – michas

    +1

    फिर से, बहुत बहुत धन्यवाद। मैं 'गिट पुल - रीबेस' के बारे में पढ़ रहा हूं और 100% नहीं हूं, अगर मैं इसे वर्तमान में कहता हूं (कहें) 'my_branch'। उस परिस्थिति में, आदेश 'my_branch' रिमोट से खींचता है, और उसके बाद ... कौन सा शाखा ... मास्टर नहीं मैं मानता हूं, क्योंकि मैंने आदेश में कहीं भी इसका उल्लेख नहीं किया था। तो यह 'my_branch' के खिलाफ पुन: प्रयास करना चाहिए, जो मुझे थोड़ा अजीब लगता है क्योंकि मैंने हमेशा दो अलग-अलग शाखाओं को दोबारा दबा दिया है। लेकिन मुझे लगता है कि यह संभव है, और अब मैं इसके बारे में सोचता हूं, क्यों नहीं? – larryq

    8

    मैं एक रिबेस वर्कफ़्लो का उपयोग करने की सलाह दूंगा। तो git pull का उपयोग करने के बजाय आपको git pull --rebase का उपयोग करना चाहिए।

    मैं सुविधा शाखा के साथ ऐसा ही करूंगा। तो git merge master --no-ff करने के बजाय मैं git rebase master का उपयोग करूंगा। हालांकि, यदि फीचर शाखा को विकास के दौरान सहकर्मियों के साथ साझा किया जाना है, तो आप समय-समय पर मास्टर शाखा को फीचर शाखा में विलय करने के लिए बेहतर हैं।

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

    इसे पढ़ना सुनिश्चित करें।

    Git workflow and rebase vs merge questions

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