git - स्थानीय हटाए जाने पर संघर्ष को मर्ज करता है लेकिन फ़ाइल दूरस्थ में मौजूद है


116

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

जीआईटी-मर्ज करने के बाद यह उन संघर्षों को दर्शाता है जो कि घट गए हैं।

Git gui का उपयोग करने से पता चलता है कि स्थानीय फ़ाइल हटा दी गई है, जबकि दूरस्थ शाखा फ़ाइल में सामग्री है।

आप इन फ़ाइलों को विवादित होने से कैसे रोकेंगे? क्या गिट गाई का उपयोग करने का एक सरल तरीका है?

बहुत धन्यवाद


अतीत में, एक चीज जो मैंने की है, वह है "डिलीट हुई" फाइलों को सोर्स कंट्रोल में छोड़ना, लेकिन प्रोजेक्ट / मेकफाइल या जो भी हो, उन्हें बाहर करना। यह कम से कम मर्ज विरोध के लिए एक अस्थायी अस्थायी समाधान है।
मार्क रुशखॉफ़

2
आप इसे उसी तरह से ठीक करते हैं जैसे आप किसी मर्ज संघर्ष को ठीक करते हैं: सूचकांक में वांछित संस्करण (या तो फ़ाइल, या फ़ाइल की कमी) जोड़ें और फिर प्रतिबद्ध करें। आप कौन सा चाहते है?
कैस्केबेल


@MarkRushakoff मैं आपकी सलाह को "जब मैं उस स्थिति में चलाऊंगा, जब मुझे संघर्ष को हल करने की आवश्यकता है, तो मैं केवल उन लोगों को वास्तविक रूप से हल करने के लिए हल नहीं करता हूं ताकि वे भविष्य में किसी को काटते हैं (शायद मुझे नहीं)"। यह उन लोगों के लिए वास्तव में अच्छी सलाह है जो परियोजना में अधिक समस्याएं लाना चाहते हैं।
विक्टर यारमा

जवाबों:


155

जैसा कि आप फिट देखते हैं, आपको संघर्षों को हल करना चाहिए। यदि फ़ाइल को वास्तव में हटाया जाना है, और आप उस परिवर्तन को मूल में प्रकाशित कर रहे हैं, तो उसे फिर से हटा दें:

git rm path/to/file

यदि फ़ाइल को वास्तव में अभी भी ट्रैक किया जाना चाहिए, तो इसे जोड़ें (कार्य ट्री में संस्करण मूल से संस्करण होगा):

git add path/to/file

संघर्ष को हल करने के लिए उन दोनों में से करने के बाद, मर्ज करें।


मेरे पास कई फाइलें थीं, सभी एक ही निर्देशिका में और सभी एक ही प्रत्यय के साथ। क्या बाकी सभी फाइलों को डायर में संरक्षित करते समय उन सभी को हटाने का एक शॉर्टकट है?
चिबॉर्ग

@chiborg: यह सिर्फ एक शेल प्रश्न है। cdनिर्देशिका के लिए, और git rm *.ext। आपका शेल (Git नहीं) *.extसभी मेल खाने वाले फ़ाइलनामों तक विस्तृत है।
कास्केबेल

और अगर मैं कुछ फाइलों को संरक्षित करना चाहता हूं? git rmकोई -iझंडा नहीं है ।
चिबॉर्ग

@chiborg: आपने कहा कि आप किसी दिए गए प्रत्यय के साथ सब कुछ निकालना चाहते हैं, और बाकी सब कुछ बरकरार है। ठीक यही मैंने आपको बताया कि कैसे करना है। या तुम्हारा मतलब था git rm *-suffix.ext? बराबर असमानताएं। यदि आपको शेल वाइल्डकार्ड का उपयोग करने की समस्या का पता चल रहा है, तो unix.stackexchange.com पर पूछें। यदि आप एक तथ्य के लिए जानते हैं कि जो आप चाहते हैं वह ग्लोबिंग के साथ नहीं किया जा सकता है, तो हटाने के लिए उपयोग करें rm -iऔर git add -uउसका पालन ​​करें ।
कैस्केबेल

2
@ जेफ्रोमी, अगर मैं निर्दिष्ट कर रहा हूं, तो -s recursive -X oursयह अभी भी आवश्यक क्यों है git rmऔर git add?
नोएल याप

27

एक स्वीकृत टिप के अलावा, "हमारे द्वारा हटाए गए" में , यदि आप हटाए गए फ़ाइल में किए गए परिवर्तनों को देखना चाहेंगे, ताकि आप उन परिवर्तनों को लागू कर सकें, जिनका आप उपयोग कर सकते हैं:

git diff ...origin/master -- path/to/file

यदि यह "उनके द्वारा हटाए गए" परिदृश्य है, और आप परिवर्तनों को देखना चाहते हैं, तो आप उन्हें कहीं और लागू कर सकते हैं, आप इसका उपयोग कर सकते हैं:

git diff origin/master... -- path/to/file

6
हाँ! यदि आप विलय कर रहे हैं, तो जब आप किसी फ़ाइल का नाम बदला गया था या फ़ाइल को हटाए जाने से पहले इसकी सामग्री को स्थानांतरित कर दिया गया था, तो यह महत्वपूर्ण है यदि आप इसे दूर नहीं करना चाहते हैं।
एडवर्ड एंडरसन

8
एक अनुस्मारक के रूप में: यह तब काम नहीं करता है जब विरोध पुन: शुरू करने के दौरान होता है । स्पष्ट होने की आवश्यकता हैgit diff mybranch@{1}...origin/master -- path/to/file
nschum

@ मंशू धन्यवाद! यह वही है जो मैं देख रहा था।
चुइम

2
आप भी उपयोग कर सकते हैं git diff --base(मेरे अन्य उत्तर देखें)।
डोरियन मार्चल

हाय जोसेफ, मैं अभी भी अटका हुआ हूं, हालांकि यह जवाब आशाजनक लग रहा है। यदि आपके पास एक पल है, तो मैं आपको यहां जवाब देना पसंद करूंगा: stackoverflow.com/q/63044843/470749 धन्यवाद!
रयान

9

Git GUI में, आप विवादित फ़ाइल का चयन करते हैं और फिर मुख्य पाठ क्षेत्र पर राइट-क्लिक करते हैं, जहां परस्पर विरोधी पाठ दिखाया गया है।

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

मुझे यह पता लगाने के लिए एक महीने का समय लगा ... अच्छा होगा यदि गिट जीयूआई वास्तव में प्रलेखन था ...


4

सर्वश्रेष्ठ-रेटेड उत्तर संघर्ष को हल करने के तरीके पर केंद्रित है।

इससे पहले, आप शायद जानना चाहते हैं कि स्थानीय रूप से हटाए गए फ़ाइलों में रिमोट क्या बदल गया है।

ऐसा करने के लिए, आप निम्न परिवर्तन देख सकते हैं:

git diff --base

से https://git-scm.com/docs/git-diff#Documentation/git-diff.txt--1--base

"आधार" संस्करण के साथ काम करने वाले पेड़ की तुलना करें [...]। सूचकांक में ये चरण केवल अनमैरिड एंट्रीज़ के लिए होते हैं, जबकि विरोधों को हल करते हुए।


यहाँ git diff --base stackoverflow.com/a/60484874/470749
रयान

0

ईजीट में मुझे भी समस्याएं मिलीं। मेरा समाधान था:

  • Git मंचन दृश्य का उपयोग किया।
  • तुलनित्र खोलने के लिए अस्थिर परिवर्तनों पर दिखाई गई प्रत्येक फ़ाइलों पर डबल क्लिक किया गया
  • "सभी को बाईं ओर से कॉपी करें" आइकन पर क्लिक करें
  • फ़ाइल सहेजें (यह अप्रतिबंधित सूची से गायब हो जाएगा)

0

जैसा कि संबंधित प्रश्न के इस उपयोगी उत्तर में कहा गया है , आप git mergetoolएक संवाद शुरू करने के लिए उपयोग कर सकते हैं, जहाँ आप चुन सकते हैं कि आप फ़ाइल के संशोधित संस्करण को हटाना चाहते हैं या नहीं।

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