2011-10-18 18 views
20

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

क्या शाखा को मास्टर में परिवर्तित करना या मर्ज करना संभव है और दूसरी बार एक शाखा से फाइल का पक्ष लेने के लिए गिट बताएं?

अग्रिम धन्यवाद!

उत्तर

6

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

अपने पुराने गुरु शाखा की एक बैकअप बनाएँ:

git checkout master 
git branch oldMaster 

पुराने मास्टर हटाएँ और नए मास्टर बनाने के लिए:

git checkout topicBranch 
git branch -D master 
git branch master 

तो एक दूरस्थ सर्वर पर भंडार पर होस्टिंग, आप अद्यतन करने की आवश्यकता होगी रिमोट:

git push --force remoteName master:master 

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

0

मैं अभी भी Git में एक विशेषज्ञ नहीं हूँ, लेकिन ऐसा लगता है आप rebase आदेश दिखाई देने लगे:

git checkout branch_name 
git rebase master 
git checkout master 

इस वसीयत की तरह लग रहा बिंदु पर अपने गुरु में सभी परिवर्तनों ऑटो विलय जहां ' मास्टर से अलग शाखा फिर से, फिर उन परिवर्तनों के मास्टर पर मौजूदा परिवर्तनों को दोबारा लागू करें (इसलिए आपको विलय नहीं करना होगा)।

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

git push --force origin branch_name 

फिर अपने दूरदराज के मास्टर शाखा में अपनी शाखा से सभी परिवर्तनों को होगा, और आप इसे वापस बाहर खींच कर सकते हैं ...

git checkout master 
git pull --force origin 
23

आप एक में यह कर सकते हैं रीसेट कमांड के साथ शॉट:

git checkout master 
git reset --hard topicBranch 

एक हार्ड रीसेट वर्तमान शाखा को दी गई प्रतिबद्धता को इंगित करेगा। यह उस मास्टर पर किसी भी काम को फेंक देगा जो पहले से ही विषय शाखा पर नहीं है; वे विलय नहीं किया जाएगा।

रीबेज के लिए एक ही चेतावनी यहां भी लागू होती है: ऐसा न करें अगर आप पहले से ही मास्टर ब्रांच को अन्य डेवलपर्स के साथ साझा की गई किसी भी संग्रह में धक्का दे चुके हैं।

+1

+1, लेकिन आपको शायद सामान्य चेतावनी जोड़नी चाहिए कि 'गिट रीसेट - हार्ड' सभी असामान्य परिवर्तनों को फेंकता है। –

+0

क्या आप अगली बार चेतावनी डाल सकते हैं, आखिरी नहीं, lol – Helzgate

+2

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

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