क्या चेकआउट का उपयोग करके सभी फ़ाइलों के लिए संघर्ष को हल करने का एक तरीका है --ours
और --theirs
? मुझे पता है कि आप इसे अलग-अलग फ़ाइलों के लिए कर सकते हैं, लेकिन इसे सभी के लिए करने का कोई तरीका नहीं मिल सकता है।
क्या चेकआउट का उपयोग करके सभी फ़ाइलों के लिए संघर्ष को हल करने का एक तरीका है --ours
और --theirs
? मुझे पता है कि आप इसे अलग-अलग फ़ाइलों के लिए कर सकते हैं, लेकिन इसे सभी के लिए करने का कोई तरीका नहीं मिल सकता है।
जवाबों:
बस काम कर रहे निर्देशिका के माध्यम से grep और xargs कमांड के माध्यम से आउटपुट भेजें:
grep -lr '<<<<<<<' . | xargs git checkout --ours
या
grep -lr '<<<<<<<' . | xargs git checkout --theirs
यह कैसे काम करता है: grep
वर्तमान निर्देशिका ( .
) और उपनिर्देशिकाओं में हर फाइल के माध्यम से खोज करेगा ( -r
झंडे) परस्पर विरोधी मार्कर (स्ट्रिंग '<<<<<<<<) की तलाश में
-l
या --files-with-matches
झंडा उत्पादन के लिए केवल फ़ाइल नाम जहां स्ट्रिंग मिला था ग्रेप का कारण बनता है। पहले मैच के बाद स्कैनिंग बंद हो जाती है, इसलिए प्रत्येक मिलान की गई फ़ाइल केवल एक बार आउटपुट होती है।
मिलान किए गए फ़ाइल नाम फिर xargs पर पाइप किए जाते हैं , एक उपयोगिता जो पाइप इनपुट इनपुट को अलग-अलग तर्कों में या उसके लिए तोड़ती हैgit checkout --ours
--theirs
अधिक इस लिंक पर ।
चूँकि कमांड लाइन पर इसे हर बार टाइप करना बहुत असुविधाजनक होगा, अगर आप इसे बहुत अधिक उपयोग करके खुद को पाते हैं, तो यह आपकी पसंद के शेल के लिए एक उपनाम बनाने के लिए एक बुरा विचार नहीं हो सकता है : बैश हमेशा की तरह है ।
इस विधि को कम से कम Git संस्करणों 2.4.x के माध्यम से काम करना चाहिए
git diff --name-only --diff-filter=U
।
git status | grep both | awk '{print $3}' | xargs git checkout --[theirs|ours]
। अगर आपके पास कोई बड़ा प्रोजेक्ट है तो उसे टटोलने की तुलना में जल्दी।
CONFLICT (rename/rename): Rename "a.txt"->"c.txt" in branch "HEAD" rename "a.txt"->"b.txt" in "master"
git status --porcelain | egrep '^UU' | cut -d ' ' -f 2 |xargs git checkout --[theirs|ours]
:।
आप कर सकते हैं -Xours
या -Xtheirs
साथ git merge
ही। इसलिए:
git reset --hard HEAD
)git merge -Xours
या git merge -Xtheirs
)अस्वीकरण: बेशक आप -Xours
या तो एक ही विकल्प चुन सकते हैं, या -Xtheirs
, अलग-अलग रणनीति का उपयोग करें जो आपको निश्चित रूप से फ़ाइल द्वारा जाना चाहिए।
मुझे नहीं पता कि इसके लिए कोई रास्ता है checkout
, लेकिन मैं ईमानदारी से नहीं सोचता कि यह बहुत उपयोगी है: चेकआउट कमांड के साथ रणनीति का चयन करना उपयोगी है यदि आप विभिन्न फ़ाइलों के लिए अलग-अलग समाधान चाहते हैं, अन्यथा बस मर्ज रणनीति दृष्टिकोण के लिए जाएं।
--theirs
or --ours
-Option नहीं है । एक दृष्टिकोण होगा git merge -s recursive -Xtheirs BRANCH
।
--theirs
और --ours
न तो गिट के साथ उपलब्ध हैं 2.2.0
। या तो मेरा उत्तर सटीक नहीं था या वे पुराने गिट संस्करण में उपलब्ध थे (यह उत्तर आईटी युग में बहुत पुराना है)। सही दृष्टिकोण के साथ है -X
। मैं तदनुसार अपडेट करता हूं
git checkout --[ours/theirs] .
जब तक आप सभी संघर्षों की जड़ में हैं, तब तक आप क्या चाहते हैं। हमारा / उनका केवल अनमैरिड फ़ाइलों को प्रभावित करता है, इसलिए आपको विशेष रूप से विरोध / खोज / आदि का विरोध नहीं करना चाहिए।
error: path 'foo/bar/blah' does not have our version
।
git diff --name-only --diff-filter=U | xargs git checkout --theirs
काम करने लगता है। ध्यान दें कि आपको इसे प्राप्त करने के लिए git रेपो की रूट डायरेक्टरी में cd'ed होना चाहिए।
मामले में किसी और को बस एक शाखा से सब कुछ अधिलेखित करने के लिए देख रहे हैं (गुरु कहते हैं) दूसरे की सामग्री के साथ, वहाँ एक आसान तरीका है:
git merge origin/master --strategy=ours
आभार https://stackoverflow.com/a/1295232/560114
या आसपास के अन्य तरीकों के लिए, देखें कि क्या "git मर्ज -s हमारा" का "उनका" संस्करण है?
git checkout --ours -- .
काम करता है ?.
वर्तमान निर्देशिका का मतलब है, जब काम करने वाली निर्देशिका रूट से लागू किया जाता है, तो इसका मूल रूप से संपूर्ण कामकाजी निर्देशिका का मतलब है। यकीन नहीं है कि अगर यह--ours
ध्वज के साथ काम करेगा , और मुझे यकीन नहीं है कि यह हटाए गए या पुनर्नामित फ़ाइल विरोध को कैसे संभालेंगे।