2009-05-02 8 views
44

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

$ git merge origin/master 
Updating 1b8c5c6..eb44c23 
error: Entry 'blah.java' not uptodate. Cannot merge. 

एक तोड़फोड़ पृष्ठभूमि से आ रहा है, मैं अपने काम के पेड़ स्वचालित रूप से मर्ज जब मैं रिपोजिटरी से परिवर्तन खींच होने के लिए इस्तेमाल किया कर रहा हूँ और यदि संघर्ष हैं, तो मैं उन्हें मैन्युअल रूप से हल करता हूं।

तेज तरीका मैं Git में यह करने के लिए मिल गया है है:

$ git stash 
$ git merge origin/master 
$ git stash pop 

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

+3

क्या होगा यदि आप विवाद विवाद कर चुके हैं? क्या होगा यदि आप गंदे फ़ाइलों (आपके द्वारा संशोधित फाइलों) में विवाद विलय करेंगे? जूनियो सी हैमनो (गिट रखरखाव) ब्लॉग पर "स्थानीय परिवर्तनों को रखने के साथ मज़ा" भी देखें: http://gitster.livejournal.com/29060.html –

+0

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

+0

संबंधित प्रश्न: http://stackoverflow.com/questions/18529206/when-do-i-need-to-do-git-pull-before-or-after-git-add-git-commit – leo9r

उत्तर

18

जहाँ तक मैं कह सकता हूं, सबसे अच्छा आप कर सकते हैं जो आपके पास पहले से git stash है। मुझे यह भी अजीब लगता है कि विलय केवल साफ पेड़ों से निपटना चाहता है।

+3

मैं इसे अपने .bashrc में रखूंगा: जीएम() { गिट स्टैश; गिट मर्ज $ @; गिट स्टैश पॉप } और फिर यह देखने के लिए प्रतीक्षा करें कि मुझे किसी भी तरह गधे में काटने के लिए कितना समय लगता है। –

+1

@ जेरेमी: आप एक दिन बहुत पुरानी छेड़छाड़ लागू कर देंगे :)। मेरे साथ हुआ :)। – reto

+0

@reto: यह कैसे होगा? – Casebash

36

सब कुछ जो आपने कभी भी विचलन से सीखा है उसे भूल जाओ।

बाहरी परिवर्तनों को शुरू करने से पहले हमेशा प्रतिबद्ध रहें।

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

यदि आप प्रतिबद्ध हैं, तो आप कर सकते हैं। यदि आप नहीं करते हैं, तो आप केवल पीड़ित होने जा रहे हैं।

याद रखें: में आपके द्वारा किए गए कार्यों के लिए नहीं है, लेकिन आप जो भी प्रतिबद्ध नहीं करते हैं, वह आसानी से खो सकता है।

बस सुरक्षित और आसान चीज़ करें और जल्दी करें और अक्सर प्रतिबद्ध करें।

+1

तो मैं अपने डिबगिंग कथन प्रतिबद्ध करता हूं और फिर विलय करता हूं। फिर मैं कुछ वास्तविक परिवर्तन करता हूं जिन्हें मैं धक्का देना चाहता हूं। मैं अपने डिबगिंग कथन कैसे प्राप्त करूं, अब मैं जो सामान करना चाहता हूं वह उस प्रतिबद्धता पर निर्भर है? –

+0

आप "रिवर्ट" कमांड –

+1

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

2

आप अपने स्थानीय भंडार के संबंध में परिवर्तन वाली फ़ाइलों पर परिवर्तन मर्ज करने के लिए git merge नहीं बता सकते हैं। जब आप विलय बुरी तरह जाते हैं तो यह उन समय पर आपके परिवर्तनों को खोने से बचाता है।

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

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

आप प्रयोगात्मक या डिबग परिवर्तन हो है, तो आप git rebase का उपयोग करता आप git merge के माध्यम से प्राप्त करने के बाद उन्हें स्थानांतरित करने यह आसान उनमें से छुटकारा पाने के लिए या उन्हें एक रिपोजिटरी को गलती से धक्का से बचने के लिए बनाने के लिए हो सकता है।

ध्यान दें कि एक शाखा पर git rebase का उपयोग करके आपने एक साझा भंडार में धक्का दिया है जो उस भंडार से खींच रहे सभी लोगों के लिए दुःख का कारण बन जाएगा।

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

+0

आप किसके बारे में बात कर रहे हैं? एसवीएन विलय से पहले अपनी फाइल बैकअप। गिट संस्करण नियंत्रण का सी ++ है। अत्यधिक जटिल और जटिल होने पर गर्व होता है। – JohnPristine

+0

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

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