Git और कमांड लाइन का उपयोग करके मर्ज के दौरान स्थानीय फ़ाइल या दूरस्थ फ़ाइल को कैसे रखें?


194

मुझे पता है कि vimdiff का उपयोग करके संशोधन को कैसे मर्ज किया जाता है, लेकिन, मुझे लगता है कि मैं जानता हूं कि पूरी फाइल रखने या फेंकने के लिए अच्छा है, मैं यह कैसे करूं?

मैं उनमें से प्रत्येक के लिए vimdiff नहीं खोलना चाहता, मैं एक आदेश चाहता हूं जो कहता है कि 'स्थानीय रखें' या 'रिमोट रखें'।

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

मैं इसके विपरीत भी दिलचस्पी ले रहा हूं: मैंने बड़ा समय खराब कर दिया और अपने परिवर्तनों को छोड़ते हुए, दूरस्थ फ़ाइल को स्वीकार करना चाहता हूं।

जवाबों:


309

आप भी कर सकते हैं:

git checkout --theirs /path/to/file

दूरस्थ फ़ाइल रखने के लिए, और:

git checkout --ours /path/to/file

स्थानीय फ़ाइल रखने के लिए।

फिर git addउन्हें और सब कुछ किया जाता है।

संस्करण: ध्यान रखें कि यह एक mergeपरिदृश्य के लिए है। एक के दौरान rebase --theirsशाखा जहां काम कर रहा है को दर्शाता है।


4
मैंने ऐसा किया है .. लेकिन कुछ नहीं होता है .. मुझे कैसे पता चलेगा कि यह सही फ़ाइल ले रहा है? मैं उपयोग कर रहा हूँ git version 1.8.4अगर वह मायने रखता है।
रोजी कासिम

3
उलटे शब्द का उपयोग क्यों? मुझे लगता है कि "उनकी" रिमोट फाइल होगी और "हमारी" मेरी फाइल होगी
phuclv

1
तो यह है, @ LưuVĩnhPhúc
देव की प्रतीक्षा में ...

7
नहीं, उनके अर्थ उलट हैं stackoverflow.com/q/2959443/995714 stackoverflow.com/q/29324812/995714 उनकी अपनी फ़ाइलें और हमारा होगा रहे हैं में दूरदराज के शाखा फ़ाइलें
phuclv

6
"आराम से", हाँ। सहज ज्ञान युक्त? नंबर
विल्बर व्हेले

107

यह दृष्टिकोण अधिक सीधा लगता है, व्यक्तिगत रूप से प्रत्येक फ़ाइल का चयन करने की आवश्यकता से परहेज:

# keep remote files
git merge --strategy-option theirs
# keep local files
git merge --strategy-option ours

या

# keep remote files
git pull -Xtheirs
# keep local files
git pull -Xours

से सीधे कॉपी किया गया: हल करें Git एक पुल के दौरान अपने परिवर्तनों के पक्ष में संघर्ष को मर्ज करता है


3
यह पसंद है। विशेष रूप से अगर एक से अधिक फ़ाइल हैं।
टेक

सवाल दो अलग-अलग कमांडों के लिए था, लेकिन इन दोनों का क्या करना है, इसका कोई विवरण नहीं है। प्रत्येक पंक्ति क्या करती है?
एलेक्स

मैं इसे खोजने से पहले कम से कम पांच स्टैक्वेरफ़्लो उत्तर से गुजरा, जो मुझे चाहिए था। धन्यवाद।
बोल्टन बेली

14

git checkout {branch-name} -- {file-name}

यह पसंद की शाखा से फाइल का उपयोग करेगा।

मुझे यह पसंद है क्योंकि posh-gitस्वत: पूर्ण इसके साथ बहुत अच्छा काम करता है। यह किसी भी अस्पष्टता को भी हटा देता है कि कौन सी शाखा दूरस्थ है और कौन सी स्थानीय। और --theirsमेरे लिए वैसे भी काम नहीं किया।


कोई अस्पष्टता, दोनों {मेरा} और {उनका} के लिए काम करती है, पूरी निर्देशिकाओं को जोड़ने का समर्थन करती है। यह स्वीकृत उत्तर होना चाहिए।
डिटानचेन

9

लाइन-एंड चीज़ के लिए, man git-mergeनिम्न देखें :

--ignore-space-change 
--ignore-all-space 
--ignore-space-at-eol

जोड़ना autocrlf = falseऔर / या safecrlf = falseविंडोज़ क्लोन करने के लिए सुनिश्चित करें (.it / config)

गिट मेरिजेट का उपयोग करना

यदि आप इस तरह एक मर्जूल कॉन्फ़िगर करते हैं:

git config mergetool.cp.cmd '/bin/cp -v "$REMOTE" "$MERGED"'
git config mergetool.cp.trustExitCode true

फिर एक साधारण

git mergetool --tool=cp
git mergetool --tool=cp -- paths/to/files.txt
git mergetool --tool=cp -y -- paths/to/files.txt # without prompting

नौकरी करेंगे

सरल git कमांड का उपयोग करना

अन्य मामलों में, मैं मानता हूं

git checkout HEAD -- path/to/myfile.txt

चाल चलनी चाहिए

रिवर्स करने के लिए संपादित करें (क्योंकि आपने खराब कर दिया है):

git checkout remote/branch_to_merge -- path/to/myfile.txt

युक्तियों के लिए +1, लेकिन स्वीकार नहीं किया गया लेकिन यह वह नहीं है जो मैंने मांगा था। मैं ऐसा कुछ चाहता हूं जो सभी मामलों में काम करे, न कि केवल उदाहरण के मामलों में। यदि आप अपना मर्ज पहले ही शुरू कर चुके हैं, तो "git चेकआउट रिमोट / ब्रांच_टो_मरेज - पाथ / टू / myfile.txt" काम नहीं करेगा: यह कहेगा कि आप मर्ज के बीच में हैं और आपको ऐसा करने से रोकेंगे।
ई-सतीस

1
@ ई-सटिस: यह आश्चर्यजनक है। मुझे लगता है कि एक बग, एक पथ के साथ चेकआउट एक नियमित चेकआउट नहीं है (और यह HEAD को प्रभावित नहीं करता है)। मैं अब इसे आज़माने जा रहा हूँ क्योंकि मैं इस पर विश्वास नहीं कर सकता हूँ
बजे

1
@ ई-सतीस: सूओ ... मैं सही था; git checkout remote/branch_to_merge -- path/to/myfile.txtमर्ज संघर्ष का समाधान करते समय एक आकर्षण की तरह काम करता है। (
गीट १.11.१

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