Git में 'दोनों जोड़े' मर्ज संघर्ष को हल करना?


138

मैं git में रिबासिंग कर रहा हूं, और मुझे जो एक संघर्ष मिल रहा है, वह है 'दोनों को जोड़ा' - यानी, बिल्कुल वैसा ही फ़ाइल नाम मेरी शाखा में स्वतंत्र रूप से जोड़ा गया है, और जिस शाखा में मैं रिबास कर रहा हूं। git statusमुझे बताता है:

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both added:         src/MyFile.cs

मेरा प्रश्न यह है कि मैं इसका समाधान कैसे करूँ? क्या मुझे मर्ज टूल का उपयोग करना चाहिए या क्या कोई तरीका है जो मैं इसे केवल कमांडलाइन से कर सकता हूं? यदि मैं git rm src/MyFile.cs, git को कैसे पता है कि मैं किस फ़ाइल संस्करण को निकालना चाहता हूं और जिसे मैं रखना चाहता हूं?

जवाबों:


139

यदि तुम प्रयोग करते हो git rm git का , तो उस पथ के सभी संस्करणों को अनुक्रमणिका से हटा दिया जाएगा ताकि आपकी समाधान क्रिया आपको बिना किसी संस्करण के छोड़ दे।

आप git checkout --ours src/MyFile.csउस शाखा से संस्करण चुनने के लिए उपयोग कर सकते हैं जिस पर आप रिबासिंग कर रहे हैं या git checkout --theirs src/MyFile.csउस शाखा से संस्करण का चयन करने के लिए जिसे आप रिबास कर रहे हैं।

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


1
धन्यवाद। और मुझे सिर्फ यह एहसास हुआ कि मर्ज टूल काम नहीं कर रहा था क्योंकि git .LOCAL और .REMOTE फ़ाइलों को मर्ज बनाता है, लेकिन .BASE फ़ाइल नहीं। मुझे लगता है कि यह सिर्फ एक खाली .BASE फ़ाइल बनाना चाहिए। यदि आप मैन्युअल रूप से खाली .BASE फ़ाइल बनाते हैं, तो मर्ज टूल ठीक काम करता है।
जेजे

1
@ जेज: कृपया इस धागे को देखें: thread.gmane.org/gmane.comp.version-control.git/188776/…
CB Bailey

1
तो क्या आप कह रहे हैं कि यह हाल के संस्करण में तय किया जाएगा?
Jez

1
@Jez: यह Git संस्करण> = 1.7.9.1 में है git.kernel.org/?p=git/...
सीबी बेली

21
@ टोम के जवाबों से: जब कर रहे हों ... git checkout --ours someFile ऐसा लग सकता है कि यह कुछ भी नहीं किया जब git स्टेटस कर रहा हो। बस बाद में ऐसा करना याद रखें। git add someFile git status
pec

72

मैं कभी कभी इसे प्रयोग भ्रामक लगता है --theirsऔर --oursपहचान करने के लिए जहां फ़ाइल से आएगा विकल्प। मेरा अधिकांश समय उस शाखा में होगा, जिसका मैं खंडन कर रहा हूँ, जिसे इसके द्वारा संदर्भित किया जाता है --theirs!

आप भी उपयोग कर सकते हैं git checkout <tree-ish> -- src/MyFile.cs

जहां <tree-ish>या तो शाखा नाम या कमिट-आईडी द्वारा प्रतिस्थापित किया जा सकता है जिसमें वह फ़ाइल होती है जिसे आप रखना चाहते हैं।

git checkout 6a363d8 -- src/MyFile.cs

git checkout my_branch -- src/MyFile.cs

git checkout HEAD -- src/MyFile.cs


42

जब कर रहा है ...

git checkout --ours someFile

ऐसा लग सकता है कि यह कुछ भी नहीं किया जब git स्थिति कर रहा है।

बस बाद में ऐसा करने के लिए याद रखें।

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