2011-02-22 16 views
12

मैं समझता हूँ "हमारा" मर्ज रणनीति (उद्धरण सुनने के मर्ज? आसपास) है कि वास्तव में दूसरी शाखा से किसी भी प्रतिबद्ध उपयोग नहीं करता।एक क्यों "Git -s हमारा मर्ज" का प्रयोग करेंगे?

"हमारा" रणनीति कभी-कभी "के अन्य इतिहास रखने" के रूप में उल्लेख किया है। लेकिन यह इतिहास को "लागू" के रूप में रिकॉर्ड करता है। अजीब। वहाँ मामलों में जहां मैं इस व्यवहार चाहते हैं कर रहे हैं?

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

ध्यान दें कि मैं "-ssss" रणनीति के बारे में पूछ रहा हूं, "-X ours" विकल्प "-s recursive" (जो उसमें अलग है जो उन पर लागू होता है जो संघर्ष नहीं करते हैं)।

+0

हालांकि बहुत देर से:

मैं भी जो लोगों के लिए उपयोगी हो सकता है ours का उपयोग कर एक और उत्तर पाया एक नज़र [यहां] है (http://stackoverflow.com/a/1426163/5784831) – Christoph

उत्तर

10

एक प्रयोग "छोड़" करने के लिए एक एक रखरखाव शाखा है, जो जाने के लिए इरादा नहीं है पर किए गए प्रतिबद्ध है विकास की अपनी मुख्य/ट्रंक शाखा में वापस। उदाहरण के लिए यह पिछला प्रश्न देखें: git - skipping specific commits when merging

2

मैं परित्यक्त सहित अन्य शाखाओं, ट्रैक करने के लिए इस्तेमाल किया एक अतिरिक्त शाखा में इस छद्म मर्ज का उपयोग कर रहा हूँ। इस अतिरिक्त शाखा में वास्तव में केवल एक फ़ाइल है (जिसे branches-list कहा जाता है), जिसमें सक्रिय और निष्क्रिय शाखाओं की एक टेक्स्ट सूची होती है, लेकिन महत्वपूर्ण बिंदुओं पर (ज्यादातर शाखा-अंक और "अंत-शाखा", या तो मर्ज या त्यागें) विकास शाखाओं को इस शाखा में विलय कर दिया गया है ("-sss" के साथ)।

यहाँ our project के हाल के एक स्क्रीनशॉट:

screenshot

इस प्रकार, मैं अंत में elo-test गुरु से branched, और फिर इस से मैं अपने question here (और जवाब के लिए stroke-transform-example branched - यह दो अलग-अलग किया जाना चाहिए था हालांकि, करता है)। इस तरह के प्रत्येक शाखा-बिंदु पर, और अधिक महत्वपूर्ण बात यह है कि प्रत्येक बिंदु पर जब कोई शाखा किसी अन्य शाखा में विलय नहीं हो जाती है (जो stroke-transform-example के साथ तब होगा जब मैं अगली सफाई करता हूं), अब मैं इस शाखा को -s ours मेटा- शाखा branches

फिर बाद में मैं अपने इतिहास को खोए बिना उपयोग की जाने वाली शाखाओं को हटा सकता हूं, इसलिए git branch -a का उत्पादन हमेशा काफी छोटा होता है। यदि मैं कभी भी उस पर वापस देखना चाहता हूं जो मैंने किया था, तो मैं उन्हें आसानी से ढूंढ सकता हूं।

(मुझे लगता है कि यह वास्तव में क्या इस विकल्प के लिए किया जाता है नहीं है, लेकिन यह काफी अच्छा काम करता है।)

+0

धन्यवाद आपके चित्रकारी उत्तर के लिए। * विलय-सोर्स "के बाद," वास्तविक विलय "से इस" छद्म "विलय को भेदभाव करने के लिए भिन्नता की आवश्यकता होती है, क्या मुझे यह अधिकार मिल रहा है? –

+0

बीटीडब्ल्यू और ओटी, मुझे लगता है कि मैं यह कोशिश करूंगा [लिंक] (http: //www.fencing -game.de/en/rules) कभी-कभी (कागज और पेंसिल के साथ)! –

+1

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

0

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

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

git checkout -b temp remote/origin 
git revert HEAD 
git push temp:origin 
git checkout master 
git merge origin/master 
के लिए एक छोटा विकल्प चाहते हैं

तो आप बस कर

git merge -s ours origin/master 
1

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

उदाहरण के लिए, अपने प्रयोग मामला था:

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

इस मामले में आप क्या कर सकते हैं, इस प्रकार निम्न चरणों का उपयोग कर रहे हैं जो किसी अन्य SO उपयोगकर्ता in another SO answer here द्वारा उल्लिखित हैं। लेकिन कृपया से नीचे मेरी चेतावनी नोट देखें।

git checkout dev 
git merge -s ours master 
git checkout master 
git merge dev 

वर्थ एक त्वरित नोट: यह के अंत में, मेरे मालिक मेरे देव के साथ तारीख को था, लेकिन देव से पता चला 4 प्रतिबद्ध दूरस्थ, जो अजीब है पर लाई जानी है। धक्का देने के लिए 0 होना चाहिए, क्योंकि मैं बस मास्टर को अपडेट करना चाहता था। फिर भी, कोड ठीक लग रहा था। बस ध्यान देने योग्य है, क्योंकि मैंने कभी भी git merge -s ours का उपयोग कभी नहीं किया था, इसलिए इसके उपयोग पर 100% नहीं है। https://stackoverflow.com/a/13307342/339803

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